Mic*_*out 29 javascript language-design
从JavaScript类型的jQuery文档中可以看到这段代码描述转换为布尔值时字符串的行为(该主题与此问题无关,但它只是我找到代码的地方):
!"" // true
!"hello" // false
!"true" // false
!new Boolean(false) // false
Run Code Online (Sandbox Code Playgroud)
我得到前三个例子,但我没有得到最后一个例子,因为:
new Boolean(false) == false //true
!false // true
Run Code Online (Sandbox Code Playgroud)
所以我假设:
!new Boolean(false) // true
Run Code Online (Sandbox Code Playgroud)
但反而:
!new Boolean(false) // false, mind = blown
Run Code Online (Sandbox Code Playgroud)
这是什么我甚至不...
是因为:
new Boolean(false) === false // false
Run Code Online (Sandbox Code Playgroud)
如果是这样,它的用途是什么?
Ada*_*kis 27
new Boolean(false)返回一个非null 的对象.非null对象总是真实的.
因此,!任何非null对象都将始终为false.
要向自己证明,可以在javascript控制台中运行它
(typeof new Boolean(false)) //"object"
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用strict equality运算符确认new Boolean(false)不是真的false:
new Boolean(false) === false // false
Run Code Online (Sandbox Code Playgroud)
顺便说一句,将Boolean函数作为函数调用- 没有new - 实际上会返回一个原语
!Boolean(false) // true
(typeof Boolean(false)) //"boolean"
Run Code Online (Sandbox Code Playgroud)
因为new Boolean返回此处所述的对象.
的!定义如下:
11.4.9逻辑NOT运算符(
!)生产UnaryExpression:
!UnaryExpression的计算方法如下:
设expr是评估UnaryExpression的结果.
让oldValue成为
ToBoolean(GetValue(expr)).如果是oldValue
true,则返回false.返回
true.
并且:
9.2 ToBoolean
抽象操作ToBoolean根据表11将其参数转换为Boolean类型的值:
表11 - ToBoolean转换
参数类型 - 结果
...
对象 -
true
所以,它是一个对象,因此ToBoolean返回true,因此!返回false.