zoukankan      html  css  js  c++  java
  • javascript中对象和数组的异同点

     

    一、JS声明对象或数组  JS对象:{ }  JS数组:[ ]

     

    对象       var b={m:'123',n:'abc'};alert(b.m);alert(b.n);

     

    一维数组     var a=[1,2,3];alert(a[1]);alert(a.length);
    二维数组     var ar = [ [ 'a' , 'b'],[ 4, 5 , 6 , 5 ],[ 7, 8 , 9 ] ];alert(ar[1].length);

     

    对象跟数组结合  var b={m:[{f:'123'},{g:'abc'}],n:[{h:'456'},{u:'098'}]};alert(b.m[0].f);

     

    数组跟对象结合  var b=[{m:'abc',n:'fff'},{x:'123',y:'555'}];alert(b[1].x);

     

    二、数组”(array)和“对象”(object)两者都可以用来表示数据的集合。

     

    在javascript中,对象被定义为属性和值的集合。最直接的表现便是对象字面量:var obj={a:3,b:"hello",c:[1,2,3]}。相比传统的面向对象的语言,这种方式大大简化的对象创建。在这种情况下,javascript的对象其实就是一个关联数组。在javascript中,数组又可以认为是索引数组,即可以用整数来进行索引。数组和对象在这种情况下非常接近。

    比如数组a=[1,2,3,4],和对象a={0:1,1:2,2:3,3:4},运行alert(a[1])两种结果是相同的。

    这就是说,数据集合既可以用数组表示,也可以用对象表示,那么我到底该用哪一种呢?

    数组和对象的区别:

    (1)数组表示有序数据的集合,而对象表示无序数据的集合。——如果数据的顺序很重要,就用数组,否则就用对象。

    (2)数组的数据没有”名称”(name),对象的数据有”名称”(name)

    但是:数组分为索引数组(下标为整数数字)和关联数组(下标为文本)。

    例如在javascript中,可以这样定义一个对象:var a={"城市":"北京","面积":16800,"人口":1600};
    但是,也可以定义成一个关联数组:
              a["城市"]="北京";
              a["面积"]=16800;
               a["人口"]=1600;

    于是:在Javascript语言中,关联数组就是对象,对象就是关联数组。

    因此,在javascript中,数组是一种特殊的对象,其除了具有一般对象的一些属性和方法外,还具有一些专属于数组的属性和方法:push,pop等。

    当使用typeof判断数组类型时其会返回object。一个比较直观的方法可以说明对象和数组之间的关系:

    var a=[1,2,3,4];a["pro"]="hello";alert(a.length);//4

    在这种情况下,数组a的长度不变,pro是a这个对象的属性而不是其元素。由于在javascript中,对象的属性可以用点号和中括号来引用,而数组的元素使用中括号来引用,因此会造成误解。

    总结:

    区别:

    (1)创建方式不同:数组表示有序数据的集合,而对象表示无序数据的集合。数组的数据没有”名称”(name),对象的数据有”名称”(name)。

    var arr = [11,22,33,44,55];
    var obj = {
        attr1:'01',
        attr2:'02',
        attr3:'03',
        attr4:'04',
        attr5:'05'
    }

    (2)调用方法不同

     对象的属性可以用点号和中括号(注意中括号内是字符串表达式,要加引号)来引用,而数组的元素使用中括号来引用

    console.dir(arr[1]);
    console.dir(obj.attr1);
    console.dir(obj['attr1']);

    (3)对象键值唯一,数组可以重复

    var arr = [11,11,33,44,55];
    var obj = {
            attr1:'01',
            attr2:'02',
            attr3:'03',
            attr4:'04',
            attr5:'05',
            attr1:"00"
      }
    console.dir(arr);
    console.dir(obj);

    (4)对象没有长度,不能用for循环

        // 对象没有长度    
        console.dir(arr.length);   // 5
        console.dir(obj.length);   // undefined
    
        for (var i = 0; i <arr.length; i++) {
            console.dir(arr[i]);
         }

    相同点:

    (1)数组和对象都可以使用for...in 循环

    for(var index in arr){
        console.dir(index);          // 属性
        console.dir(arr[index]);    //
    }
    for(var attr in obj){
         console.dir(attr);          // 属性
         console.dir(obj[attr]);    //
    }        
  • 相关阅读:
    javascript:history.go()和History.back()的区别
    Web 开发] 定制IE下载对话框的按钮(打开/保存)(转)
    JavaScript 浮动定位提示效果(转)
    关于网页*静态化*及SEO问题的一些补充(转)
    httpanalyzer 结合 HttpWebRequest Post的运用
    SEO工具大全(转)
    导出excel
    Asp.NET导出Excel文件乱码解决若干方法 (转)
    关于DataBinder.Eval Eval Bind
    电脑疑似中毒
  • 原文地址:https://www.cnblogs.com/yanayana/p/6769539.html
Copyright © 2011-2022 走看看