JavaScript 之 中心语法 [ 数组 ]

数组

形貌

  • 示意能够贮存一个或多个数据值的有序鸠合
  • 数组中贮存的数据中能够称为元素
  • 数组中能够贮存任何范例的数据

语法

  • 字面量体式格局 – var 数组称号 = [ 元素, 元素 , … ]
  • 组织函数体式格局 – var 数组称号 = new Array( 元素, 元素, … )
  • 函数体式格局 – var 数组称号 = Array( 元素, 元素, … )

length(长度)

  • 示意数组的长度(数组中贮存元素的个数)
  • 当运用组织函数体式格局或函数体式格局来定义数组,数组中的元素只要一个,并且为number范例时,示意定义数组的长度
  • 字面量体式格局不能定义数组的长度

定义数组

字面量体式格局

/* 字面量体式格局 */
var arr1 = [];// 定义数组 - 数组中没有任何元素,称为空数组
console.log( arr1 );// 显现 - []
var arr2 = [ 100, '啊哈哈', true ];
console.log( arr2 );// 显现 - [ 100, '啊哈哈', true ]
var arr9 = [10];// 不能定义数组的长度
console.log( arr9 );// 显现 - [ 10 ]

构建函数体式格局

/* 组织函数体式格局 */
var arr3 = new Array();
console.log( arr3 );// 显现 - []
var arr4 = new Array( 100, '呀吼吼吼', true );
console.log( arr4 );// 显现 - [ 100, '呀吼吼吼', true ]
var arr5 = new Array( 10 );// 定义数组的长度
console.log( arr5 );// 显现 - [ <10 empty items> ]

函数体式格局

/* 函数体式格局 */
var arr6 = Array();
console.log( arr6 );// 显现 - []
var arr7 = Array( 100, '我的彼苍呐', true );
console.log( arr7 );// 显现 - [ 100, '我的彼苍呐', true ]
var arr8 = Array( 10 );// 定义数组的长度
console.log( arr8 );// 显现 - [ <10 empty items> ]

数组的范例

  • 能够分为索引数组和关联数组

索引数组

  • 示意数组中贮存元素的位置用数字值来示意
  • 数字值(也能够叫索引值)是从 0 最先
  • 能够依据索引值来增加数组中的元素
  • JavaScript中定义数组的默许范例为索引数组
/* 索引数组 */
/* 定义一个空数组 */
var arr1 = [];
console.log( arr1 );// 显现 []
/* 为空数组中增加元素 */
arr1[0] = 100;// 依据索引值增加
arr1[1] = '啊哈哈';
arr1[2] = true;
console.log( arr1 );// 显现 [ 100, '啊哈哈', true ]

希罕数组

  • 是索引数组的另一种表现形式
  • 希罕数组的数组长度和数组中的有用内容不一致
  • 希罕数组的位置许可不一连,没有定义的位置默许为空(undefined)
/* 希罕数组 */
var arr2 = [];
/* 为空数组中增加元素 */
arr2[0] = 100;// 许可不根据索引值的递次举行增加
arr2[4] = 300;
arr2[8] = 500;
console.log( arr2 );// 显现 [ 100, <3 empty items>, 300, <3 empty items>, 500 ]
console.log( arr2.length );// 显现 9(有用数据只要三个)

关联数组

  • 示意数组中贮存元素的位置用字符串来示意
  • 数组的长度(length)对关联数组没有用果
/* 关联数组 */
var arr3 = [];
/* 为空数组中增加元素 */
arr3['name'] = '啊哈哈';// 运用字符串体式格局增加元素
arr3['nian'] = 100;
arr3['gong'] = '深山';
console.log( arr3 );// 显现 [ name: '啊哈哈', nian: 100, gong: '深山' ]
console.log( arr3.length );// 显现 0(length无效)

数组的挪用

  • 示意提取数组中数据值举行显现
  • 假如接见的元素位置未定义过 或 位置为空,提取的数据为 undefined ,语法不报错

索引数组

  • 经由过程索引值来提取对应的元素
/* 索引数组 */
var arr1 = [ '啊哈哈', 100, true ];
/* 挪用具体位置的元素 */
console.log( arr1[0] );// 显现对应数据内容  啊哈哈
/* 挪用未定义位置的元素 */
console.log( arr1[4] );// 显现 undefined

希罕数组

  • 经由过程索引值来提取对应的元素
/* 希罕数组 */
var arr2 = [];
arr2[0] = 100;
arr2[4] = 300;
arr2[8] = 500;
/* 挪用具体位置的元素 */
console.log( arr2[0] );// 显现对应数据内容  100
/* 挪用未定义位置的元素 */
console.log( arr2[5] );// 显现 undefined

关联数组

  • 经由过程字符串来提取对应的元素
/* 关联数组 */
var arr3 = [];
arr3['name'] = '啊哈哈';
arr3['nian'] = 100;
arr3['gong'] = '深山';
/* 挪用具体位置的元素 */
console.log( arr3['name'] );// 显现对应数据内容  啊哈哈
/* 挪用未定义位置的元素 */
console.log( arr3['nm'] );// 显现 undefined

数组的修正

  • 示意对数组中的数据值举行修正
  • 经由过程数组的索引值找到对应元素的位置,在经由过程对指定数据举行从新赋值来完成数组修正
/* 索引数组 */
var arr1 = [];
arr1[0] = 100;
arr1[1] = 200;
console.log( arr1 );// 显现 [ 100, 200 ]
/* 对指定元素数据举行修正 */
arr1[0] = 400;
console.log( arr1 );// 显现 [ 400, 200 ]

/* 关联数组 */
var arr2 = [];
arr2['name'] = '啊哈哈';
arr2['nian'] = 100;
arr2['gong'] = '深山';
console.log( arr2 );// 显现 [ name: '啊哈哈', nian: 100, gong: '深山' ]
/* 对指定元素数据举行修正 */
arr2['name'] = '呀吼吼吼';
console.log( arr2 );// 显现 [ name: '呀吼吼吼', nian: 100, gong: '深山' ]

数组的删除

  • 示意对数组中的数据值举行删除
  • 运用delete运算符来删除数据值
  • 然则只删除数据值,不删除数据值所占的位置空间
  • 数组举行删除后会变成希罕数组
var arr = [ 100, '哈哈哈', true ];
/* 运用delete运算符来对指定数据内容举行删除 */
delete arr [ 1 ];
/* 删除后会只删除数据内容,但不会删除数据所占的位置 */
console.log( arr );//显现效果:[ 100, <1 empty item>, true ]
console.log( arr.length );//显现数组中的数据个数  3

数组的复制

  • 示意一个数组对另一个数组举行复制
  • 复制分为深复制和浅复制

深复制

  • 是复制数组中的数据值
  • 假如对复制的数据内容举行修正,不会对复制的数组中的数据值举行修正
/* 深复制:是指对数组中的数据值举行复制 */
var arr1 = [ 100, '呀吼吼', true ];
var arr2 = [];
/* 运用轮回语句对数组遍历,取得数组中的数据内容 */
for ( var a = 0; a < arr1.length; a++ ) {
    arr2 [ a ] = arr1 [ a ];//将取得的数据内容复制到另一个数组中
}
/* 显现复制效果 */
console.log( arr2 );// [ 100, '呀吼吼', true ]
/* 假如对复制的数据举行修正底本的数据不会被修正 */
arr2[ 1 ] = '哇哈哈';// 修正数据
console.log( arr2 );// 修正后效果:[ 100, '娃哈哈', true ]
console.log( arr1 );// 修正后效果:[ 100, '呀吼吼', true ]

浅复制

  • 是复制在数组中贮存的内容地点
  • 假如对复制的数据内容举行修正,会同时修正被复制的数组中的数据值
/* 浅复制:是指对数组中寄存的内容地点举行复制 */
var arr3 = [ 100, '呀吼吼', true ];
var arr4 = [];
arr4 = arr3;
console.log( arr3 );//显现效果:[ 100, '呀吼吼', true ]
/* 然则要注意假如对数据举行修正会同时修正 */
arr4[ 1 ] = '哇哈哈';//修正数据
console.log( arr4 );//修正后效果:[ 100, '娃哈哈', true ]
console.log( arr3 );//修正后效果:[ 100, '娃哈哈', true ]

数组的遍历

  • 经由过程轮回语句来猎取数组中的悉数数据内容
/* for语句遍历索引数组 */
var arr1 = [ '啊哈哈', 100, true, undefined, null ];
for ( var i = 0; i < arr1.length; i++ ) {
    console.log( arr1[i] );
}

for…in语句

语法

for ( var 变量 in 数组 ) {
    语句块
}
  • 变量 – 示意获得的数组中的数据内容
/* for...in语句遍历索引数组 */
for ( var s in arr1 ) {
    console.log( arr1[s] );
}

for语句与for…in语句的对照

  • for语句

    • 轮回的最先和完毕,能够由开发人员决议
    • 因为希罕数组的数组长度和数组的有用内容不一致,遍历出的数据值,不能过滤掉无效数据值
    • 因为关联数组的数组长度无效,所以没法运用for语句举行轮回遍历
  • for…in语句

    • 轮回只能从最先到完毕
    • 在遍历希罕数组时能够过滤掉无效数据值,直接获得有用数据值
    • for…in语句能够对关联数组举行遍历
/* 希罕数组 */
var arr2 = [];
arr2[0] = 100;
arr2[4] = 300;
arr2[8] = 500;
/* for语句遍历希罕数组 */
for ( var a = 0; a < arr2.length; a++ ) {
    /* 获得悉数数据值,包含无效数据值 */
    console.log( arr2[a]);
}
/* for...in语句遍历希罕数组 */
for ( var b in arr2 ) {
    /* 能够获得数组中的有用数据值 */
    console.log( arr2[b] );
}

/* 关联数组 */
var arr3 = [];
arr3['name'] = '啊哈哈';
arr3['nian'] = 100;
arr3['gong'] = '深山';
/* for语句遍历关联数组 */
for ( var x = 0; x < arr3.length; x++ ) {
    /* 关联数组没有数组长度,所以没法遍历 */
    console.log( arr3[x] );
}
/* for...in语句遍历关联数组 */
for ( var y in arr3 ) {
    /* 能够遍历到数组中的数据值 */
    console.log( arr3[y] );
}
    原文作者:蔡志远
    原文地址: https://segmentfault.com/a/1190000015953005
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞