JavaScript权威指南__第七章:数组

第七章:数组

  • JavaScript的数组没有类型的,元素可以使任意类型
  • JavaScript的数组是动态的,会自动增城或缩减,创建数组时无需声明大小
  • JavaScript的数组是稀疏的,元素的索引不一定是连续的
  • JavaScript的数组都有length属性,数组继承自

7.1:创建数组

  • 使用数组直接量创建数组
var empty = []; // 空数组
var primes = [1.1, true, "a",];// 不同类型的元素和结尾的逗号

var base = 1024;
var table = [base, base+1];// 数组元素可以是任意表达式

var b = [[1, {x:1, y:2}], [2, {x:3, y:4}]]; // 可以包含其他数组直接量

var count = [1,,3]; // 三个元素,中间的为undefined
var undefs = [,,]; //两个元素,数组直接量运行有可选的结尾逗号,所以只要两个元素不是三个
  • 调用构造函数Array()创建数组
var a = new Array();// 调用时不带参数
var b = new Array(10); // 指定数组大小
var c = new Array(5, 2, "testing"); // 创建带有元素的数组

7.2:数组元素的读和写(重点复习)

  • 使用“[]”操作符来访问数组中的元素
var a = ["world"];
var value = a[0];
a[1] = 3.14;
i = 2;
a[i] = 3;
a[i+1] = "hello";
a[a[i]] = a[0];
  • 数组时对象的特殊形式,JavaScript将指定的数字索引值转换成字符串,1变成”1”,然后将其当做属性名来使用
o = {}; // 创建一个普通对象
o[1] = "one"; // 使用一个整数来索引,创建了一个名为"1"的属性
console.log(o); // => Object {1: "one"}
  • 区分数组索引对象属性名
  • 所有的索引都是属性名,但只有在0-2的32次方-2直接的整数属性名才是索引
  • 所有的数组都是对象,可以为其创建任意名字的属性
  • 如果使用的属性是数组的索引,数组的特殊行为就是讲根据需要更新length的属性值
  • 可以使用负数或非整数来索引数组,此时数值就会转换为字符串,作为属性名来使用
  • 名字是非负整数,就只能是常规的对象属性,而不是数组的所有
var a = ["world"];
a[-1.23] = true; // 创建一个名为"-1.23"的属性
a[10] = 0; // 数组的第11个元素
a[1.000] = 9; // 和a[1]等价
console.log(a); // => ["world", 9, 10: 0, -1.23: true]

7.3:稀疏数组

(略。。。)

7.4:数组长度

(略。。。)

7.5:数组元素的添加和删除

a = []; // 定义一个空数组
a[0] = "zero";// 添加元素
  • 使用push()方法在数组末尾添加元素
a = []; 
a.push("zero");
a.push("one", "two");
  • 使用unshift()方法在数组的头部插入元素,其他元素一次后移

  • 删除元素:可以使用delete方法删除元素

a = [1, 2, 3];
delete a[1]; // 删除数组中的第一个元素

7.6:数组遍历

  • 使用for循环遍历数组

7.7:多维数组

  • JavaScript中不支持正真的多维数组,但可以使用数组的数组来表示

7.8:数组方法

7.8.1 join()

  • Array.join()方法将素组中的所有元素转换为字符串并连接起来,返回最后生成的字符串
  • 可以指定可选的字符串作为字符串的分隔符,否则使用逗号
var a [1,2,3];
a.join(); // => "1,2,3"
a.join(" "); // => "1 2 3"
a.join("-"); // => "1-2-3"

7.8.2 reverse()

  • Array.reverse()方法将数组中元素颠倒顺序,返回逆序的数组
var a = ["a", "b", "c"];
a.reverse().join(); // => "3,2,1"

7.8.3 sort()

  • Array.sort()方法将数组中的元素排序,返回排序后的数组
var a = new Array("banana", "cherry", "apple");
a.sort(); // 默认按字母表顺序
  • 按照指定的顺序排序
var a = [2, 3, 1, 9, 4];
a.sort(function(a,b){
    return a-b;
    })

7.8.4 concat()

  • Array.concat()方法创建并返回一个新的数组,包含原始数组元素和concat的所有参数
var a = [1, 2, 3];
a.concat(4, 5); // [1,2,3,4,5]
a.concat([4,5]); // [1,2,3,4,5]
a.concat(4, [5,[6,7]]); // [1,2,3,4,5,[6,7]]

7.9:ECMAScript5中的数组方法

  • forEach();
  • map();
  • filter();
  • every()和some()
  • reduce()和reduceRight()
  • indexOf()和lastIndexOf();

7.10:数组类型

ECMAScript 5中可以使用Array.isArray()函数来一个对象是否是数组

Array.isArray([]); // 返回true
Array.isArray({}); // 返回false

7.11:类数组对象

JavaScript数组的一些特性是其他对象没有的

  • 添加元素时length会自动增加
  • 设置length为一个较小的值将截断数组
  • 从Array.prototype中继承一些方法
  • 其类属性为“Array”

  • 类数组把拥有一个数字length属性和对应非负整数属性的对象看做一种类型的数组
// 为一个常规的对象增加一些属性使其变为类数组对象,然后遍历类数组元素
var a = {};
var i = 0; // 添加属性,成为类数组
while(i<10) {
    a[i] = i*i;
    i++;
}
a.length = i;

// 遍历数组
var total = 0;
for(var j=0; j

7.12:作为数组的字符串

(略。。。)

你可能感兴趣的:(JavaScript,js权威指南)