代码之家  ›  专栏  ›  技术社区  ›  techguy2000

使用单个整数数组访问另一个数组中的项时发生的情况

  •  0
  • techguy2000  · 技术社区  · 6 年前

    http://jsfiddle.net/7yfpc1nL/3/

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

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   maerics    6 年前

    是,当使用 [] 运算符,JavaScript将参数强制为字符串,字符串形式为 [[0]] 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()