vue.js 数组里面有对象、数组_JavaScript 类数组对象

c48cd59406a9b1cf09b8fb85832869e8.png

JavaScript类数组对象的定义:

可以通过索引访问元素,并且拥有length属性。

没有数组的其它方法,例如:push,forEach,indexOf等

下面让我们从读写,长度,遍历这三个方面看看:

读写:

let foo = {
    0: '白茶',
    1: 23,
    2: 'man',
    length: 3
  };
let arr = ['白茶', 23, 'man'];
console.log(foo[0]) //白茶
console.log(arr[0]) //白茶

长度:

let foo = {
    0: '白茶',
    1: 23,
    2: 'man',
    length: 3
  };
let arr = ['白茶', 23, 'man'];
console.log(foo.length) //3
console.log(arr.length) //3

遍历:

let foo = {
    0: '白茶',
    1: 23,
    2: 'man',
    length: 3
  };
  let arr = ['白茶', 23, 'man'];
  for (let i = 0; i < foo.length; i++) {
    console.log(foo[i])
  }
  for (let i = 0; i < arr.length; i++) {
    console.log(arr[i])
  }

//遍历结果是一样的

以上三个方面都是一样的。

那么类数组可以使用数组的方法吗?

let foo = {
    0: '白茶',
    1: 23,
    2: 'man',
    length: 3
  };
foo.push('添加1')

//报错:Uncaught TypeError: foo.push is not a function

显然类数组是不能直接使用数组的方法的,那我们就是想要使用呢?

既然我们无法直接使用,我们可以借助,Function.all间接调用。

例如:

  let foo = {
    0: '白茶',
    1: 23,
    2: 'man',
    length: 3
  };
  Array.prototype.push.call(foo, '添加1')
  console.log(foo) //{0: "白茶", 1: 23, 2: "man", 3: "添加1", length: 4}

那我们怎样使一个类数组变为数组呢?

上面我们使用Function.all间接调用数组的方法,这里我们还可以使用它:

let foo = {
    0: '白茶',
    1: 23,
    2: 'man',
    length: 3
  };
  let arr = Array.prototype.slice.call(foo)
  console.log(arr) //["白茶", 23, "man"]

首先:foo这个类数组是没有slice这个方法的,Array.prototype.slice.call(foo)这个表达式相当于赋予foo这个对象slice方法。

其次:Array.prototype.slice.call(foo);相当于Array.prototype.slice.call(foo, 0);是把取一个数组(或者类数组)的子集,并作为一个数组返回。所以当后面的作用对象是一个类数组时,就会把这个类数组对象转换为了一个新的数组。

所以上面的代码也等同于下面:

let foo = {
    0: '白茶',
    1: 23,
    2: 'man',
    length: 3
  };

foo.slice = Array.prototype.slice;
foo.slice();

下面我们再补充几个转化的方法:

let arr = Array.prototype.slice.call(foo);
let arr2 = Array.from(foo);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值