hanyuxinting / Blog

记录点滴
1 stars 0 forks source link

JS权威指南读书笔记-7章 数组 #9

Open hanyuxinting opened 7 years ago

hanyuxinting commented 7 years ago

JS的数组是动态的~不必关心它怎么给你分配空间,也不用手动分配空间~ 还可能是稀疏的?就是有的位置可能没有值了。

数组是对象的特殊形式~~


function testArray(){

    var empty = [];
    var three = [1,2,3];
    var different = [1, '2', true, ,{test:1}];

    var BS = 1024;
    var table = [BS, BS+1, BS+2];

    var test = [[1], [2,3]];

    var two = [1,2,];
    console.log(two.length == 2);//true

    // 不嫌累?还是用直接量吧。请放弃下边的写法。
    var a = new Array();
    var a10 = new Array(10);
    var aString = new  Array(3,4,'test');

    different = [1, '2', true, ,{test:1}];
    var d1 = different[1];
    console.log(d1);
    different[5] = 'five plus';
    console.log(different);
    different.push('six');
    different.push('seven', 'eight');
    different.unshift('zero');
    //different : ["zero", 1, "2", true, undefined × 1, Object, "five plus", "six", "seven", "eight"]
    delete different[5];
    //different : ["zero", 1, "2", true, undefined × 2, "five plus", "six", "seven", "eight"] 长度并不变。
    var dif = different.pop(); // eight 9
    dif = different.shift(); // zero 8

    // 用数组的方式给对象赋值。
    var o = {};
    o[1] = 'test';
    console.log(o);//{1: 'test'};

    // 以下:数组索引是对象属性名的特殊类型,JS数组没有越界的说法。
    var array = [];
    array['100'] = 1;
    console.log(array.length); //101
    array[-1.2] = -1.2;
    console.log(array);

    //array.-1.2
    console.log(array['-1.2']); // -1.2

    // 上面 array 为稀疏数组。应用场景?

    // 然而这下边两个兵没有什么区别,从chrome运行结果来看。都是undefind
    var a1 = [,,];
    var a2 = new Array(2);
    for(var i in a1){
        console.log(i + ' ' + a1[i]);
    }
    for(var j in a2){
        console.log(j + ' ' + a2[j]);
    }

    // 修改数组长度,特别是缩小时,会影响数组数据
    var lenarray = [1,2,3,4,5];
    lenarray.length = 3; // [1,2,3]
    lenarray.length = 0; // []
    lenarray.length = 10;// [undefined*10]

    // 可以对数组进行一系列的property操作~冻结、定义等等。
    var defArray = [1,2,3];
    Object.defineProperty(defArray, 'length', {
        writable: false
    });
    defArray.length = 0;//不报错,执行,但不起作用

    // 数组遍历

}