类数组对象和Arguments对象与数组的区别和联系

2020-4-9 15:50:14
学习记录
128

一句话解释类数组对象

拥有一个 length 属性和若干索引属性的对象

例子

var array = ['name', 'age', 'sex']; var arrayLike = { 0: 'name', 1: 'age', 2: 'sex', length: 3 }

类数组特点

类数组与数组相同点

  • 跟数组一样的读写方式
  • 跟数组一样可获取属性长度
  • 跟数组一样可遍历

不同点

  • 不可以直接使用数组方法

调用数组方法

使用call,apply间接调用

下面例子是类数组转数组

var arrayLike = {0: 'name', 1: 'age', 2: 'sex', length: 3 } [].join.call(arrayLick,'&'); // name&age&sex [].slice.call(arrayLick,0);//["name", "age", "sex"] [].map.call(arrayLick,function(item){ return item; })/["name", "age", "sex"] [].splice.call(arrayLick,0);["name", "age", "sex"] //ES6 类数组转数组方法 [].from(arrayLick); [].concat.apply([],arrayLick);

arguments对象

Arguments 对象只定义在函数体中,包括了函数的参数和其他属性。在函数体中,arguments 指代该函数的 Arguments 对象。

function foo(name, age, sex, hobbit) { console.log(name, arguments[0]); // name name // 改变形参 name = 'new name'; console.log(name, arguments[0]); // new name new name // 改变arguments arguments[1] = 'new age'; console.log(age, arguments[1]); // new age new age // 测试未传入的是否会绑定 console.log(sex); // undefined sex = 'new sex'; console.log(sex, arguments[2]); // new sex undefined arguments[3] = 'new hobbit'; console.log(hobbit, arguments[3]); // undefined new hobbit } foo('name', 'age')

传入的参数,实参和 arguments 的值会共享,当没有传入时,实参与 arguments 值不会共享,除此之外,以上是在非严格模式下,如果是在严格模式下,实参和 arguments 是不会共享的。

类数组对象和Arguments对象与数组的区别和联系

avatar

Sky(小新)

个人签名: 提升能力,创造价值!

江苏-南京
skylpz@qq.com