在学习《JavaScript语言精粹》并且在node中测试时,我想知道为什么会出现这种行为。我知道!表示“逻辑非”操作符,而!!基本上将!x的返回值布尔化,但是为什么要这样做呢?
var x = 3, y = 4;
x != y; // true
x = !y // false ----> But really, its setting x to "not y", a truthy value, correct
x = !!x*x // 1 --- wut?
经过一番尝试,我理解声明的是:“x等于非非x(因为!x === false而被视为“true”)乘以x(true)”。
所以我的疑问是,在JS中为什么true * true === 1?
true * true
并得到 1,或者false * false
并得到 0。 - newswim!!(x*x)
? - Bergix = 5 //5
x*x //25
!(x*x) //false
!!(x*x) //true
(!!(x*x)) //true
!(!!(x*x)) //false
!!(!!(x*x)) //true
等等...显然,您可以无限地翻转二进制值,但我认为这个教训是这样的; 逻辑非语句将引发一种不完全明显的类型强制转换。 - newswim