在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

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

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

clipboard.png

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

但是直接運行++[],會產(chǎn)生如下報錯:

clipboard.png

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

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

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

原因:JavaScript權威指南-第6版-中p72

clipboard.png

[[]][0] 是數(shù)組元素,[] 是數(shù)組,所以[[]][0] 不報錯,[] 報錯;

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

原因:JavaScript高級程序設計-第3版-中p38

clipboard.png

所以題主的這個代碼+ +[]相當于:

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

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

clipboard.png
RTF tc39

如果跟的不是一個引用,那自然就拋錯咯:

++1      // 錯
i = ++[] // 錯
i = ++1  // 錯

翻了一下犀牛書,說++的「操作數(shù)是一個左值(lvalue)(變量、數(shù)組元素或對象屬性)」,這一句也能解釋你的問題。

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

這就和 ++1 不能正常運行一樣

2017年3月29日 05:43