8

我对 JavaScript 中的一些概念有疑问,例如(truthy, true)(falsy, false)

我知道 1 的类型不是true,但问题是:为什么1 == true

ECMAScript 将 1 或“ghsagh”视为 的主要原因是true什么?

我也无法理解truthyand的含义falsy

这种考虑有什么好处?!

4

2 回答 2

4

JavaScript 喜欢尽可能隐式地将值转换为其他类型。因此,在将布尔值与其他类型的变量进行比较时,JavaScript 使用与旧编程语言相同的逻辑。表示空、null 或零(例如 0 或“”)的值评估为 false,而任何其他值(例如 1、5、-19、“ghsfsah”或其他有意义的内容)评估为 true。

为什么这样做?对于一个人来说,它允许开发人员在检查变量是否有内容时使用一个小快捷方式。例如,如果用户没有在文本字段中输入,我们可以轻松检查字段是否为空并提示用户。

if ( !textfield.value ) {
    alert( "Please enter something in the text box" );
}

如果您需要查看某事实际上truefalse,您可以使用===.

于 2015-02-11T14:45:21.313 回答
2

JavaScript 对所需的值类型非常灵活。如果 JavaScript 想要一个布尔值,它会将你给它的任何值转换为布尔值。

一些值(“真”值)转换为真,而其他(“假”值)转换为假。

以下值转换为 false,因此工作方式类似于 false:

  1. 不明确的
  2. 无效的
  3. 0
  4. -0
  5. "" // 空字符串

所有其他值,包括所有对象(和数组)都转换为 true 并像这样工作。

例如,假设变量o包含一个对象或值null。您可以使用如下 if 语句显式测试 o 是否为非空:

if (o !== null){
....
}

严格不等于运算符!==比较onull评估为真或假。但是你可以省略比较,而是依赖于null虚假和对象是真实的事实:

if (o){
....
}

在第一种情况下, if 的主体将仅在ois not时执行null。因此,即使 o 设置为 ,代码块也会执行undefined

第二种情况不太严格:它将执行 if only if ois notfalse或任何假值(例如nullor undefined)的主体。哪个 if 语句适合您的程序实际上取决于您期望分配给的值o。如果你需要区分null0“”,那么你应该使用显式比较。

于 2019-06-29T07:59:58.473 回答