美文网首页Javascript
阮一峰:数组的本质,数组的key实际是"1"

阮一峰:数组的本质,数组的key实际是"1"

作者: 李chun | 来源:发表于2019-04-11 08:10 被阅读140次

请多看看阮一峰的JavaScript教程https://wangdoc.com/javascript

数组的本质,数组的key实际是"1","2","3"...而不是1,2,3。只是用1,2,3去操作的时候[0],最终被转换为["0"]

本质上,数组属于一种特殊的对象。typeof运算符会返回数组的类型是object。

typeof [1, 2, 3] // "object"

上面代码表明,typeof运算符认为数组的类型就是对象。

数组的特殊性体现在,它的键名是按次序排列的一组整数(0,1,2...)。

var arr = ['a', 'b', 'c'];
Object.keys(arr)
// ["0", "1", "2"]

上面代码中,Object.keys方法返回数组的所有键名。可以看到数组的键名就是整数0、1、2。

由于数组成员的键名是固定的(默认总是0、1、2...),因此数组不用为每个元素指定键名,而对象的每个成员都必须指定键名。JavaScript 语言规定,对象的键名一律为字符串,所以,数组的键名其实也是字符串。之所以可以用数值读取,是因为非字符串的键名会被转为字符串。

var arr = ['a', 'b', 'c'];

arr['0'] // 'a'
arr[0] // 'a'

上面代码分别用数值和字符串作为键名,结果都能读取数组。原因是数值键名被自动转为了字符串。

注意,这点在赋值时也成立。如果一个值总是先转成字符串,再进行赋值。

var a = [];

a[1.00] = 6;
a[1] // 6

上面代码中,由于1.00转成字符串是1,所以通过数字键1可以读取值。

上一章说过,对象有两种读取成员的方法:点结构(object.key)和方括号结构(object[key])。但是,对于数值的键名,不能使用点结构。

var arr = [1, 2, 3];
arr.0 // SyntaxError
上面代码中,arr.0的写法不合法,因为单独的数值不能作为标识符(identifier)。所以,数组成员只能用方括号arr[0]表示(方括号是运算符,可以接受数值)。

相关文章

  • 阮一峰:数组的本质,数组的key实际是"1"

    请多看看阮一峰的JavaScript教程https://wangdoc.com/javascript 数组的本质,...

  • HashMap源码解析

    java.util.HashMap 本质是一个Entry[]数组(哈希桶数组),用Key的哈希值对桶数组size取...

  • HashMap源码

    java.util.HashMap 本质是一个Entry[]数组(哈希桶数组),用Key的哈希值对桶数组size取...

  • ES6—数组

    作者:米书林参考文章:《菜鸟教程》、《 ECMAScript 6 入门》(阮一峰) 数组的创建 传统js数组的创建...

  • 解构赋值

    ** 参考**书籍:ECMAScript 6 入门作者:阮一峰 数组的解构赋值可以从数组中提取值,按照对应位置,对...

  • C语言的数组指针与指针数组(One)

    一、数组指针与指针数组: 数组指针<——>本质是指针 指针数组<——>本质是数组上图: 二、数组指针: int ...

  • 数组笔记

    阮一峰[https://www.ruanyifeng.com/]数组的拓展: https://es6.ruanyi...

  • java_哈希表数据结构

    本质上是一维数组table和单向链表的接口 map.put(key,value)原理 先将key`` value ...

  • 一个简单的数组对象去重,方便cv

    // 数组去重 arr:数组;key:根据数组中为key的键名去重 filterArr(arr, key) {...

  • (阮一峰)数组的解构赋值

    基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring...

网友评论

    本文标题:阮一峰:数组的本质,数组的key实际是"1"

    本文链接:https://www.haomeiwen.com/subject/sylziqtx.html