当我试图理解为什么Javascript中![]
出现false
时,我被卡住了。我知道[]
被认为是真实的,!true
是false
,但我想深入了解。
根据Spec,一元NOT运算符的工作方式如下:
Let oldValue be ToBoolean(GetValue(expr)).
If oldValue is true, return false.
然后我试着理解GetValue([])
,现在一切都模糊了。 Spec sec-8.7.1
GetValue([])
只返回[].valueOf()
吗?
答案 0 :(得分:1)
GetValue
(不是Reference)只返回那个普通值 - 在你的情况下是数组。否则,它将评估对标识符(在变量范围内)或属性(在对象中)的引用,但在您的示例中并非如此。
答案 1 :(得分:0)
在同一页面上,有关如何实施GetValue的说明,请参阅8.7.1:
https://www.ecma-international.org/ecma-262/5.1/#sec-8.7.1
(它与valueOf
无关)
评估GetValue([]),然后根据规范评估结果上的ToBoolean。