为什么会!{}[true] 在 JavaScript 中 evaluate to true?

2022-08-30 04:31:47

{}[true]是 并且应该是 。[true]![true]false

那么,为什么会评估到呢?!{}[true]true


答案 1

我相信这是因为 plain 被解析为一个空的语句块(不是对象文本),后跟一个包含 的数组,即 。{}[true]truetrue

另一方面,应用运算符会使解析器解释为对象文本,因此以下内容成为返回的成员访问,并且确实是(如 是)。!{}{}[true]undefined!{}[true]true!undefinedtrue


答案 2

因为 不返回 ,但是 ,并且计算为:{}[true]trueundefinedundefinedfalse

http://jsfiddle.net/67GEu/

'use strict';
var b = {}[true];
alert(b); // undefined
b = !{}[true];
alert(b); // true