当我试图理解为什么这个![]
在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()
吗?
用简单值(而不是GetValue
)调用的Reference只返回那个普通值 - 在你的情况下是数组。否则,它将评估对标识符(在变量范围内)或属性(在对象中)的引用,但在您的示例中并非如此。
在同一页面上,有关如何实现GetValue的说明,请参见8.7.1:
https://www.ecma-international.org/ecma-262/5.1/#sec-8.7.1
(它与valueOf
无关)
评估GetValue([]),然后根据规范评估结果的ToBoolean。