js 在控制台中
[[]][0] 為什麼這個不報錯 [] 這個報錯呢
[[]][0]
[]
++[[]][0]: [[]]是一个只包含一个空数组的数组,那么根据运算符优先级,[] > (prefix)++,运算[[]][0],得到一个空数组Array(0),是一个对象,并且是数组中的一个值,符合左值的条件.之后进行(prefix)++运算,由于++运算将执行数据类型转换(PS:Javascript中具体的数据类型转换太复杂了,我就不展开了),这里Array[0]将转换成0,结果++得到1.
++[[]][0]
[[]]
[] > (prefix)++
Array(0)
(prefix)++
++
Array[0]
0
具體可看控制台輸出:
console.log([[]]) // > [Array(0)] console.log([[]][0]) // > []
++[]: 左值是一個空數組,不是一個合法的左值,所以報錯.
++[]
什麼是左值:
左值是一個古老的術語,它是指 表達式只能出現在賦值運算子的左邊。在JavaScript中,變量,物件屬性和數組元素都是左值.
我以前回答過這個問題,直接貼連結了:
js型轉換問題
++[[]][0]
:[[]]
是一个只包含一个空数组的数组,那么根据运算符优先级,[] > (prefix)++
,运算[[]][0]
,得到一个空数组Array(0)
,是一个对象,并且是数组中的一个值,符合左值的条件.之后进行(prefix)++
运算,由于++
运算将执行数据类型转换(PS:Javascript中具体的数据类型转换太复杂了,我就不展开了),这里Array[0]
将转换成0
,结果++
得到1.具體可看控制台輸出:
++[]
: 左值是一個空數組,不是一個合法的左值,所以報錯.什麼是左值:
我以前回答過這個問題,直接貼連結了:
js型轉換問題