将系统中的数据用统一的格式、统一的样式管理起来,这些样式有可能是一个字节、一个节点,加以对数据的规划,我们称之为数据结构。
而最早出现的所谓对象,其实就是对数据的封装,属于「数据结构」中一种。
数据结构就是把数据存储为一块一块的,在我们需要获取它们的时候,可以用「索引」或者「名字 / key」来找到它们。
索引数组和关联数组
所有数据都可以看成只具有两种数据结构,一种是「索引数组」,另一种是「关联数组」。
数组:
[\\\'web\\\',18,\\\'男\\\']
对象:
{name:\\\'web\\\',age:18,sex:\\\'男\\\'}
而索引数组其实是关联数组的一个特例,被存取的数据,所关联的名字就是它的索引(下标)。
在 JavaScript 中,对象是关联数组。而所谓的「数组 Array」是索引数组。
所以,在 JavaScript 中:
所有连续的数据添加一个连续的索引,称为「数组」;
所有不连续的数据添加一个唯一的 key 值,称为「对象」;
数据结构解决什么问题?
因为计算机底层只接受「字节」和「位」等数据值,数据结构中「值」都是通过计算得来的。
相关的运算结果都会以「值」来体现出来,所以就抽象出来了「结构体」和「对象」这种东西。
我们编程需要处理数据的结构,整理数据的结构。而计算机的底层要解析我们提供的数据结构。方便了我们的管理和维护。
封装和解构
所谓对象,就是对数据的封装;
所谓解构,就是从封装的对象中,提取数据;
之前文章提到过 ES6 对象的解构赋值 ,里面记录了关于解构赋值的用法和模式,从一个结构中把那些「值数据」取出来,就叫解构。
对于之前的文章需要补充一些:在解构中,关联数组只能解构到关联数组,索引数组只能解构到索引数组。
也就是说:
let [x,y] = [1,2];
console.log(x,y);// 1,2
let {a,b} = {a:1,b:2};
console.log(a,b);// 1,2
但是:
let a=1,b=2;
let [c,d] = {a,b};
索引数组和关联数组之间不能解构,因为查找值的方式不一样。索引数组是按「索引」去查找值,并赋值。而关联数组是按「key」去查找值。所以,导致赋值不成功。
let a=1,b=2;
let [c,d]= Object.values({a,b});
不过,我们可以统一数据格式,将「对象成员」的列举改成「对象成员值」的列举,按「索引」去获取值,就可以了。
内容参考于:极客时间《JavaScript 核心原理解析》
原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34489.html