Why does !{}[true] evaluate to true in JavaScript?

{}[true] is [true] and ![true] should be false .

So why does !{}[true] evaluate to true ?


I believe that's because plain {}[true] is parsed as an empty statement block (not an object literal) followed by an array containing true , which is true .

On the other hand, applying the ! operator makes the parser interpret {} as an object literal, so the following {}[true] becomes a member access that returns undefined , and !{}[true] is indeed true (as !undefined is true ).


Because {}[true] does not return true , but undefined , and undefined is evaluated as false :

http://jsfiddle.net/67GEu/

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

Because

{}[true]

evaluates to undefined , and !undefined is true .

From @schlingel:

true is used as key and {} as hash map. There doesn't exist an property with the key true so it returns undefined . Not undefined is true , as expected.

Console session (Node.js [0.10.17] ):

> {}[true]
undefined
> !{}[true]
true
> [true]
[ true ]
> ![true]
false
>

However, in the Google Chrome console:

> !{}[true]
true

So, no inconsistencies. You're probably using an old version of the JavaScript VM. For those who need further evidence:

UPDATE

With Firefox, it also evaluates to true :

链接地址: http://www.djcxy.com/p/76340.html

上一篇: 什么是无值?

下一篇: 为什么在JavaScript中将{} [true]评估为true?