【发布时间】:2019-04-04 23:20:27
【问题描述】:
我正在尝试一个代码 sn-p,但在 console.log 语句和条件语句中的空数组检查结果是不同的。 帮助/思考为什么会有所不同? 提前致谢!
//Output: true
if([]) {
console.log(true)
} else{
console.log(false)
}
//Output: false
console.log([] == true)
【问题讨论】:
-
[]等于一个不是假值的数组,如 undefined 或 null 等,这就是为什么它返回 true 尝试使用变量,你会看到,[] == true这测试是否数组是否为空 -
Comparing 一个值 with 一个布尔值不同于 converting 一个值 to 一个布尔值。
-
[] 是一个真值,这意味着它在 if 的布尔上下文中被认为是真的。真实值是所有未指定为虚假的值(“”、0、NaN、未定义、null、false)。这就是为什么
true首先被打印出来的原因。比较时,Javascript 首先将任何非布尔类型转换为其字符串表示形式。如果对空数组调用 toString 方法,则会得到空字符串。所以console.log([] == true)本质上变成了console.log("" == true)ecma-international.org/ecma-262/9.0/index.html#sec-toprimitive -
@manonthemat: “在比较时,Javascript 首先将任何非布尔类型转换为它的字符串表示形式。” 这是不正确的。例如。数字不会转换为字符串。正确的说法是:将原始值与对象进行比较时,将对象转换为原始值。将非布尔值与布尔值进行比较时,布尔值将转换为数字。
标签: javascript