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

在js取值的时候, 这种现象叫什么, 如何解释呢?

在js取值的时候, 这种现象叫什么, 如何解释呢?

凤凰求蛊 2018-09-03 09:11:49
<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>test js</title></head><body><h1>JS Test</h1><script>    var arr = [        'Dell',        'HP',        'Apple',        'Acer'    ];    var map = {        0: 'DELL',        1: 'HP',        2: 'APPLE',        3: 'ACER'    };    console.log(arr[1]);// HP    console.log(map[1]);// HP    console.log(arr[01]);// HP    console.log(map[01]);// HP    console.log(arr['1']);// HP    console.log(map['1']);// HP    console.log(arr['01']);// undefined    console.log(map['01']);// undefined</script></body></html>
查看完整描述

1 回答

?
慕村9548890

TA贡献1884条经验 获得超4个赞

所有索引都是字符串,所有数组都是对象,数组不过只是比较特殊的对象而已

所有用 a[i] 访问的 a 的时候 会计算 i 的值并转换为字符串

计算 a[01] 的时候 先计算了 01 的值,在非严格模式下 01 是数 1 的八进制表示
即 01 == 1 
所以 a[01] == a[1]

计算完 i 的值之后把它转为字符串
a[1] === a["1"]

因为 "1" != "01"
所以 a["1"] != a["01"]


关于数组和对象的索引之间的关系:

数组的 index 是 从 0 到 2^64-2 之间的整数 key(最后也转为字符串)
数组的 length 值至少比数组中最大的 index 值大 1


查看完整回答
反对 回复 2018-10-15
  • 1 回答
  • 0 关注
  • 509 浏览
慕课专栏
更多

添加回答

举报

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