JavaScript-数据类型-数组

- 任何类型的数据,都可以放入数组
    var arr = [
      {a: 1},
      [1, 2, 3],
      function() {return true;}
    ];

    arr[0] // Object {a: 1}
    arr[1] // [1, 2, 3]
    arr[2] // function (){return true;}

- 数组是一种特殊的对象
	typeof [1, 2, 3] // "object"
	let arr = [1,3,4];
	Object.keys(arr);
	//["0", "1", "2"]  Object.keys方法返回数组的所有键名 
	
	arr['0']; // 1
	arr[0]; // 1
	// 数组的键名其实也是字符串。之所以可以用数值读取,是因为非字符串的键名会被转为字符串

- length 属性是可写的
	var arr = [ 'a', 'b', 'c' ];
    arr.length // 3

    arr.length = 2;
    arr // ["a", "b"]
	// 如果人为设置一个小于当前成员个数的值,该数组的成员数量会自动减少到length设置的值。
	
    var a = ['a'];
    a.length = 3;
    a[1] // undefined
	//如果人为设置length大于当前元素个数,则数组的成员数量会增加到这个值,新增的位置都是空位。

- 清空数组的一个有效方法,就是将length属性设为0。
	arr.length = 0;
	arr // []
    
- 由于数组本质上是一种对象,所以可以为数组添加属性,但是这不影响length属性的值。
	var a = [];
    a['p'] = 'abc';
    a.length // 0
	a // [p: "abc"]
- 如果数组的键名是添加超出范围的数值,该键名会自动转为字符串。
	var arr = [];
    arr[-1] = 'a';
    arr[Math.pow(2, 32)] = 'b';

    arr.length // 0
    arr[-1] // "a"
    arr[4294967296] // "b"

in运算符

- 检查某个键名是否存在的运算符in,适用于对象,也适用于数组。
    var arr = [ 'a', 'b', 'c' ];
    2 in arr  // true
    '2' in arr // true
	3 in arr; //false  如果数组的某个位置是空位,in运算符返回false
 

for … in

- for ... in也可以遍历数组,毕竟数组只是一种特殊的对象,但是for...in不仅遍历数组的数字键 还会遍历非数字键, 所以不推荐用for...in遍历数组
    var a = [1, 2, 3];
    a.foo = true;

    for (var key in a) {
      console.log(key);
    }
 
   // '0'
   // '1'
   // '2'
    // 'foo'

- 使用delete命令删除一个数组成员,会形成空位,并且不会影响length属性。
	// var a = [1, ,3]; 两个逗号之间没有任何值叫空位
    var a = [1, 2, 3];
    a.length;
    delete a[1];
    a.length;
    console.log(a[1]);

    // 3
    // true
    // 3
    // undefined
- 数组的空位使用forEach方法  for...in结构  以及Object.keys方法进行遍历 ,空位都会被跳过;
  但如果是undefined就不会被跳过。
  
  var a = [undefined, , ,];
    a.forEach(function(x, i) {
      console.log(i + ". " + x);
    });
    // '0. undefined'  空位跳过了,但undefined没有被跳过
    for (var i in a) {
      console.log(i);
    }
    // '0'

    Object.keys(a);
    // [ '0' ]
- '类似数组的对象':一个对象的所有键名都是正整数或零,并且有length属性,那么这个对象就很像数组,语法上称为“类似数组的对象”(伪数组)。
	a.它的length属性不是动态的,不会随着成员的变化而变化;
	b.它没有数组的方法
	c.典型的’类似数组的对象‘有:函数的arguments对象,大多数DOM元素集,字符串
	d.可以利用数组的slice方法将’类似数组的对象‘变成真正的数组
		var arr = Array.prototype.slice.call(arrayLike);
	
	e:还有一个办法可以让'伪数组'使用数组的方法:通过call()把数组的方法放到对象上面
        function print(value, index) {
          console.log(index + ' : ' + value);
        }
        Array.prototype.forEach.call(arrayLike, print);
		
        // 这种方式比直接使用原生的forEach要慢,所以最好还是先将'伪数组'转换为真正的数组,再调用forEach方法
	
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中小余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值