console.log(false === 0) // false
console.log(false === !1) // true, why does it equate to true using !?
反之亦然
console.log(true === 1 ) // false
console.log(true === !0) // true
我理解平等和身份之间的区别,但无法理解 JS 的这种行为。请解释 ?
console.log(false === 0) // false
console.log(false === !1) // true, why does it equate to true using !?
反之亦然
console.log(true === 1 ) // false
console.log(true === !0) // true
我理解平等和身份之间的区别,但无法理解 JS 的这种行为。请解释 ?
这===要求两个值是相同的类型,不执行隐式强制。
当您将布尔值与带有三元组的数字进行比较时===,您将始终得到错误,因为它们不是同一类型。
但是!在数字(或其他任何东西)前面使用会先将其转换为布尔值,(与)!x相同,!Boolean(x)因此严格比较可以成功。(实际上,在任何东西上使用 ! 都会将其强制为 JS 中的布尔值)
数字到布尔转换的规则:
对于数字到布尔的转换,0和NaN被强制为false,任何非零数都被强制为true。(仅供参考,null和undefined空字符串''是 JS 中唯一的其他虚假值)
现在,您将有两个布尔值进行比较, === 将相应地返回 true 或 false。
所以,总结一下:
在!1, 1 是非零的,所以它被强制为true,并!true给出false
sofalse === !1等价于false === false,这是一个真实的陈述。
您可以计算出其他比较的详细信息。
作为附加资源,如果你有时间并且有兴趣了解更多,我推荐非常好的免费电子书《你不懂 JS》。
因为!1boolean在 JS中被视为一个值,而0或1被解释为number.
您可以使用 JStypeof !1并typeof 0查看差异。
由于,false也是一种类型,因此将其与(number)boolean匹配将产生.0false
希望清除它。
当你这样做时false === 0,它会将布尔值false与整数进行比较0。相反,当您这样做时false === !1,javascript 会将整数转换1为布尔值,而一元则!充当对有效内容的“非”操作true。由于1在 javascript 中是真实的,因此!1转换为false. 反之亦然。
console.log(0) // 0
console.log(!0) // true
console.log(1) // 1
console.log(!1) // false
JavaScript 将首先将您的倒数转换为布尔值:
console.log(false === 0)
-> false
console.log(false === !1)
-> false === false
-> true
反之亦然
console.log(true === 1 )
-> false
console.log(true === !0)
-> true === true
-> true
你了解整数和布尔值的区别吗?
console.log(false === 0) // false
console.log(false === !1) // true
console.log(true === 1 ) // false
console.log(true === !0) // true
console.log(!1) // false
console.log(!0) // true
身份比较检查一个对象是否正是那个,1 不是true,0 也不是false。
因为 !运算符将任何值转换为布尔类型,并且您正在检查另一个布尔值,这就是为什么 false === !1 给您真实的原因。