如何理解javascript中运行 “++[[ ]][0]” 语句会得到1?

此问题来源于看这篇文章js隐式装箱-ToPrimitive 中有关于隐式类型转换的叙述,但是看到文章倒数第二部分的一个例子的时候,产生了疑惑:

https://img3.mukewang.com/5c905d7a00015fd207200374.jpg

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

但是直接运行++[],会产生如下报错:

https://img3.mukewang.com/5c905d7d0001eeaf05260022.jpg

改成 + +[] 的方式执行,也只能得到0,不能得到1.

思索许久还是不能理解,望各位不吝赐教!


茅侃侃
浏览 445回答 3
3回答

largeQ

其中的第三步,即++[[]][0] 也就等于++[]。但是直接运行++[],会产生如下报错:原因:JavaScript权威指南-第6版-中p72[[]][0] 是数组元素,[] 是数组,所以[[]][0] 不报错,[] 报错;改成 + +[] 的方式执行,也只能得到0,不能得到1.原因:JavaScript高级程序设计-第3版-中p38所以题主的这个代码+ +[]相当于:+ +[]+ Number([])//Number([])===0+ 0

哆啦的时光机

var a=[];++a这就和 ++1 不能正常运行一样

婷婷同学_

++ 这个操作符后面必须跟一个引用,然后原值会被ToNumberRTF tc39如果跟的不是一个引用,那自然就抛错咯:++1      // 错i = ++[] // 错i = ++1  // 错翻了一下犀牛书,说++的「操作数是一个左值(lvalue)(变量、数组元素或对象属性)」,这一句也能解释你的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript