我对此感到惊讶,http://jsfiddle.net/7yfpc1nL/3/
const arr = ['a', 'b'];
const r = arr[[
[0]
]];
console.log(r);
JavaScript是否将[[0]]强制为0?这里发生了什么魔术?
答案 0 :(得分:2)
是的,当使用[]
运算符访问对象的属性时,JavaScript将参数强制转换为字符串,并且[[0]]
的字符串形式仅为0
,因此这是一个回旋第零个元素的访问方式。
说明:
const arr = ['a', 'b']
const idx = String([[0]]) // => "0"
arr[idx] // => "a"
我们可以验证是否使用了这样的参数字符串形式:
const obj = {
toString: function() {
console.log('OK: called obj.toString()')
return 1
}
}
arr[obj] // => "b"
// OK: called obj.toString()