为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

茅侃侃 2019-03-14 18:15:08
此问题来源于看这篇文章js隐式装箱-ToPrimitive 中有关于隐式类型转换的叙述,但是看到文章倒数第二部分的一个例子的时候,产生了疑惑:其中的第三步,即++[[]][0] 也就等于++[]。但是直接运行++[],会产生如下报错:改成 + +[] 的方式执行,也只能得到0,不能得到1.思索许久还是不能理解,望各位不吝赐教!
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

其中的第三步,即++[[]][0] 也就等于++[]。但是直接运行++[],会产生如下报错:

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

https://img1.sycdn.imooc.com//5c905d9200017da405870100.jpg

[[]][0] 是数组元素,[] 是数组,所以[[]][0] 不报错,[] 报错;

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

原因:JavaScript高级程序设计-第3版-中p38

https://img1.sycdn.imooc.com//5c905d940001580107480027.jpg

所以题主的这个代码+ +[]相当于:

+ +[]

+ Number([])//Number([])===0

+ 0


查看完整回答
反对 回复 2019-03-19
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

var a=[];

++a

这就和 ++1 不能正常运行一样


查看完整回答
反对 回复 2019-03-19
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

++ 这个操作符后面必须跟一个引用,然后原值会被ToNumber

https://img1.sycdn.imooc.com//5c905dae000190e808000212.jpg


RTF tc39


如果跟的不是一个引用,那自然就抛错咯:


++1      // 错

i = ++[] // 错

i = ++1  // 错

翻了一下犀牛书,说++的「操作数是一个左值(lvalue)(变量、数组元素或对象属性)」,这一句也能解释你的问题。


查看完整回答
反对 回复 2019-03-19
  • 3 回答
  • 0 关注
  • 444 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信