美文网首页程序员
【JS】数组和对象的区别与联系

【JS】数组和对象的区别与联系

作者: liqingbiubiu | 来源:发表于2017-12-27 11:49 被阅读85次

本文主要参考

一直以来穿梭于前端后端之间,突然间发现自己对JS的数组和对象操作有些混淆了,因为他们的操作方式太像了。例如数组 var arr = [1,2,3,4,5]和对象 var obj = {'0':1, '1':2, '2':3, '3':4, '4':5}

  • arr[3] obj[3]都会输出4
  • arr[5]=6 obj[5]=6都会给变量添加新值6

而且,在PHP中$arr = [1,2,3,4,5]$obj = ['0'=>1, '1'=>2, '2'=>3, '3'=>4, '4'=>5]完全等价,这更加剧了我的头晕!今儿个势必搞清楚~

这俩货区别到底在哪里?

带着这个疑问,我在 ECMA-262标准 9.4.2节中找到了答案:

9.4.2 Array Exotic Objects
这段话翻译过来意思是:

       数组其实是一个对数组索引属性值做特殊处理的一个"特殊对象",在这个“特殊对象”中,如果一个属性的属性名满足数组索引属性的条件,那么我们称这个属性为一个数组元素。每一个数组对象默认会有一个小于 232的非负整数属性lengthlength属性在数值上大于所有数组索引值,每当数组对象添加或者更新属性的时候,其他属性甚至会被调整来让length属性尽量保持不变;除非新添加的属性是一个数组索引,length属性值才会被修改为数值上大于所有数组索引的值。如果length属性被修改,那么数组对象中所有大于等于length属性值的数组索引属性将会被删除(对从原型中继承的数组索引属性不会有影响)。
       注:数组索引属性:如果一个字符串属性P在强转为无符号整形(ToUint32)后小于(232−1)并且强转后的值再转为字符串(ToString(ToUint32(P)))与原字符串(P)相等,那么属性P为数组索引属性。
       数组对象会自动生成length属性。
       数组对象除了提供[[DefineOwnProperty]]选择定义内部方法以外,还提供了9.1标注的所有必要内部方法。

通过上面这段话以及已经掌握的知识,我们可以总结出JavaScript中数组与对象的区别与联系主要有:

① 数组是一个特殊的对象,数组具有对象的所有性质;
② 数组可以是一个有序的数据集合,而对象是无序的(因为数组是一个特殊的对象,所有如果按照对象的方法操作数组,那么数组也可以是无序的);
③ 数组中的属性会区分数字字符串和普通字符串,如果是数字字符串且强转后数值小于(232−1),那么我们称该属性为索引属性,数组对索引属性会区别操作;
④ 数组默认会有一个length属性,该属性与数组索引属性的操作密切关联,该属性具有以下几个特点:
           1.length属性值始终大于数组中所有索引属性值(所以如果数组中索引属性值是不连续的,那么length值并不能反映数组中元素的个数);
           2.如果直接对数组中length属性赋值,那么数组中所有大于等于length属性值的索引属性都会被删除(原型中继承的索引属性除外)

注:文中如有任何错误,请各位批评指正!

相关文章

  • 【JS】数组和对象的区别与联系

    本文主要参考ECMA-262标准 一直以来穿梭于前端后端之间,突然间发现自己对JS的数组和对象操作有些混淆了,因为...

  • 概念集合

    JS中的数组和Arrary的区别 js中的数组就是array对象

  • JS数组以及数组变换

    有关数组 数组对象——一种特殊的对象JS其实没有数组,只使用对象来模拟数组 典型数组和JS数组的区别 典型数组 元...

  • js遍历数组和遍历对象的区别

    js遍历数组和遍历对象的区别

  • 数组和对象的区别

    关键词:数组&对象 数组和对象某些时候非常像,让我们看看他们之间的区别和联系 创建数组和对象 对象没有长度 调用方...

  • JS数组和对象的区别

    最近写前端比较多,一直对JS的对象 (Object)和数组(Array的用法有点搞不清楚。今天有了点理解,所以记录...

  • 指针与数组的区别和联系

    原文地址:指针与数组的区别和联系作者:zhenhuaqin 一.指针与数组的联系: 指针与数组是C语言中很重要的两...

  • js遍历与jQuery遍历

    js遍历与jQuery遍历 js遍历数组和对象 for... var demoArr = ['Javascript...

  • js中数组与对象的区别

    数组:以 ' [ ' 开始 以 ' ] ' 结束 , 用 ' , ' 隔开 ,不承认键值对格式的数据, 默认排序 ...

  • 基本类型和对象的区别

    这篇文章主要介绍JS中基本类型与对象之间的区别。 对象包括普通对象,数组以及函数。普通对象是基本类型的混合,同时其...

网友评论

    本文标题:【JS】数组和对象的区别与联系

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