使用单个整数数组访问另一个数组中的项时会发生什么

时间:2018-08-21 20:09:26

标签: javascript

我对此感到惊讶,http://jsfiddle.net/7yfpc1nL/3/

const arr = ['a', 'b'];
const r = arr[[
  [0]
]];
console.log(r);

JavaScript是否将[[0]]强制为0?这里发生了什么魔术?

1 个答案:

答案 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()