鍍金池/ 問答/HTML/ 如何理解javascript中運(yùn)行 “++[[ ]][0]” 語句會得到1?

如何理解javascript中運(yùn)行 “++[[ ]][0]” 語句會得到1?

此問題來源于看這篇文章js隱式裝箱-ToPrimitive 中有關(guān)于隱式類型轉(zhuǎn)換的敘述,但是看到文章倒數(shù)第二部分的一個(gè)例子的時(shí)候,產(chǎn)生了疑惑:

clipboard.png

其中的第三步,即++[[]][0] 也就等于++[]。

但是直接運(yùn)行++[],會產(chǎn)生如下報(bào)錯(cuò):

clipboard.png

改成 + +[] 的方式執(zhí)行,也只能得到0,不能得到1.

思索許久還是不能理解,望各位不吝賜教!

回答
編輯回答
玄鳥
其中的第三步,即++[[]][0] 也就等于++[]。但是直接運(yùn)行++[],會產(chǎn)生如下報(bào)錯(cuò):

原因:JavaScript權(quán)威指南-第6版-中p72

clipboard.png

[[]][0] 是數(shù)組元素,[] 是數(shù)組,所以[[]][0] 不報(bào)錯(cuò),[] 報(bào)錯(cuò);

改成 + +[] 的方式執(zhí)行,也只能得到0,不能得到1.

原因:JavaScript高級程序設(shè)計(jì)-第3版-中p38

clipboard.png

所以題主的這個(gè)代碼+ +[]相當(dāng)于:

+ +[]
+ Number([])//Number([])===0
+ 0
2017年12月15日 23:08
編輯回答
愿如初

++ 這個(gè)操作符后面必須跟一個(gè)引用,然后原值會被ToNumber

clipboard.png
RTF tc39

如果跟的不是一個(gè)引用,那自然就拋錯(cuò)咯:

++1      // 錯(cuò)
i = ++[] // 錯(cuò)
i = ++1  // 錯(cuò)

翻了一下犀牛書,說++的「操作數(shù)是一個(gè)左值(lvalue)(變量、數(shù)組元素或?qū)ο髮傩裕梗@一句也能解釋你的問題。

2017年10月24日 16:28
編輯回答
練命
var a=[];
++a

這就和 ++1 不能正常運(yùn)行一樣

2017年3月29日 05:43