javaScript的对象和数组

  在javascript中,数组和对象时2种不同的数据类型,而且它们也是最重要的2种数据类型。

  对象

  1.创建对象

  创建对象的最简单方法就是在javascript代码中加入一个对象直接量。对象直接量是用逗号分开的一对对的属性名和值的列表,包含在意个花括号之中,每个属性名都可以使一个javascript的标识符或一个字符串,每个属性值可以是一个常量或任意的javascript表达式。

        var empty = {};
        var point = { x: 0, y: 0 };
        var circle = { x: point, y: point.y + 1, radius: 2 };
        var home = {
            "name": "Homer Simpson",
            "age": "34",
            "married": true,
            "occupation": "plant operator",
            'email': "homer@example.com"
        };

  new运算符可以创建具体的一类对象。在new的后面跟着调用一个构造函数,它用来初始化对象属性。

        var a = new Array();
        var b = new Date();
        var r = new RegExp("haha","hehe");

  2.对象的属性

  通常用“.”运算符来存储对象的属性的值。位于"."运算符左边的值是想要访问其属性的对象。通常,它只是包含了该对象的引用的变量名,但它可以是任何一个结果对象的javascript表达式。位于“.”右边的值应该是属性名,它必须是以个标识符,而不能使字符串或表达式。

        var book = {};
        book.title = "java";
        book.chapter1 = new Object();
        book.chapter1.title = "c#";
        book.chapter1.page = 11;
        book.chapter2 = { title: "c++", page: 6 };
        //可以通过alert来测试

  可以使用运算符delete来删除已个对象的属性

        delete book.chapter2;

  3.作为关联数组的对象

  我们已经见过用运算符“.”来取一个对象属性,而数组更常用的存取属性运算符是[]。 

        book.chapter2;
        book["chapter2"];
        //2个表达式的值相等

  在C、C++等强类型语音中,一个对象的属性石固定的,而且必须预定义这些属性的名字。由于javascript是一种松类型的语言,它不采取这一规则,所以在用javascript编写的程序中,可以为对象创建任意数目的属性。但采用用运算符“.”来取一个对象的属性时,属性名是用标示符标示的。而在javascript程序中,标示符必须被逐个输入,它们不是一种数据类型,因此程序不能对它们进行操作。但用数组的[]表示方法来存取一个对象的属性时,属性是用字符串表示的。所以可以在程序里面进行操作。

        var a = { a1: 1, a2: 2, a3: 3, a4: 4 };
        var b = 0;
        for (i = 1; i <= 4; i++) {
            b = b+a["a" + i];
        }
        alert(b);//10

   4.通用的object属性和方法

  没一个对象都有constructor属性,它引用了初始化这个对象的构造函数。

        var d = new Date();
        //可以用判定对象的类型
        if ((typeof d == "object") && (d.constructor == Date)) {
            alert("is Date");
        }
        else {
            alert("Not Date");
        }

  数组

  数组array是一个有序的,值的集合。每一个值叫做一个元素(element),每个元素在数组中都有一个数字化的位置较下标(index)。由于javascript是一种非类型语言,所以一个数组的元素可以具有任意的数据类型,同一个数组的不同元素可以具有不同的类型。

        var empty = [];        //空数组
        var a = [2, 3, 4, 5, 6];
        var b = [1.1, true, "a"];//元素可以为不同的类型
        var base = 1024;
        var table = [base, base + 1, base + 2, base = 3]; //数组元素可以使表达式
        var c = [[1, { x: 1, y: 2}], [2, { x: 3, y: 4}]]; //数组直接量可以包含对象直接量或者其他的数组直接量

   创建数组的另一种方式是使用Array构造函数。

        var a = new Array();
        var a = new Array(1, 2, 3, "1", "2");
        var a = new Array(10);//指定数组的长度

  数组元素的读写,数组的第一个下标为0;

        //数组可以通过使用[]方括号来存储数组
        var a = a[0];
        a[1] = 3.14;
        i = 2;
        a[i] = 3;
        a[i + 1] = "hello";
        a[a[i]] = a[0];

  前面的已经提到,[]运算符可以用来访问对象的已命名属性

        my['a'] = 2;
        //因为数组时一种特殊的对象,可以再数组上定义非数字的对象属性,并且使用,或者[]的语法来访问它

  数组的下标范围是0 - 2的32次方 的整数,如果数组的下标为负数、浮点数、布尔值、对象及其他值,javascript会直接将它转换为一个字符串,用生成的字符串作为对象的属性名字。

  添加数组的新元素

  好像在C# 等语言中,数组时具有固定的元素的,必须在创建时指定数组长度。而在javascript中则不同,它的数组可以具有任意个数的元素,可以再任意时刻改变元素个数。

    //添加元素,直接赋值
        a[10] = 10;

  在javascript中数组 是稀疏的。这意味着数组的下标不必落在一个连续的数字范围内,只有那些真正存储在数组中的元素才能够有javascript实现分配到内存。

        a[0] = 1;
        a[10000] = 10000;
        //解析器只给数组下标为0和10000的元素分配内存,而并不给0到10000之间的那9999个元素分配内存

  3.删除数组元素

  delete运算符把一个数组的元素设置为undefined值,但是元素本身还继续存在。要真正的删除一个元素,以使下标位置高于它的所有元素都向下迁移到较低的下标位置,必须使用一个数组的方法.

        var b = [1, 2, 3, 4, 5, 6, 7];
        b.shift()//删除第一个元素
        b.pop(); //删除最后一个元素
        b.splice(2,3); //删除一个区间的元素

  数组的长度

  所有数组无论是由构造函数array()创建的,或者是直接创建的。它们都有一个特殊的属性length,和常见的对象属性不同,数组的length属性石自动更新的。

        var a = new Array(); //a.length=0
        a = new Array(10);   //a.length=10
        a = new Array(1, 2, 3);   //a.length=3
        a = [1, 2];     //a.length=2
        a[5] = -1;  //a.length=6
        a[49] = 0;  //a.length=50

  多维数组

  虽然javascript并不支持真正的多维数组,但是它允许数组的元素为数组的数组,这样就非常接近多维数组。要存储一个数组的元素为数组里面的元素,只要使用多次[]运算符即可

        var a = [[1, 2], [3, 4], [5, 6]];
        alert(a[0][1]);//2

  数组的方法

        //join把一个数组的所有元素都转为字符串
        var a = [1, 2, 3, 4, 5, 6];
        //alert(a.join()); //join把一个数组的所有元素都转为字符串 输出为1,2,3,4,5,6
        //alert(a.join('&')); //join把一个数组的所有元素都转为字符串,还可以指定分隔符 输出为1&2&3&4&5&6

        var b = "1,2,3,4,5,6,7";
        b.split(',');//split 和 join 相反 是把一个字符串,拆分为数组
        //alert(b[0]);

        //reverse把一个数组元素顺序颠倒
        a.reverse(); 
        alert(a[0]);

        //concat能创建并返回一个数组,这个数组包含了调用concat的原始数组的元素
        var c = [1, 2, 3];  //concat能常见
        a.concat(4.5)    //returns [1,2,3,4,5]

  

原文地址:https://www.cnblogs.com/lgxlsm/p/2947810.html