const obj { '2':3, '3':4, 'length':2,'splice':Array.prototype.splice, 'push':Array.prototyp

题目描述:写出执行结果,并解释为什么
const obj = {
    '2':3,
    '3':4,
    'length':2,
    'splice':Array.prototype.splice,
    'push':Array.prototype.push
}
obj.push(1);
obj.push(2);
console.log(obj);
答案:
Object(4) [empty × 2, 1, 2, splice: ƒ, push: ƒ]
 
 
/*
2: 1
3: 2
length: 4
splice: ƒ splice()
push: ƒ push()
__proto__: Object
*/
知识点:
类数组(ArrayLike):一组数据,由数组来存储,但是如果要对这组数据进行扩展,会影响到数组原型,ArrayLike 的出现提供了一个中间数据桥梁,ArrayLike 由数组的特性,但是对 ArrayLike 的扩展并不会影响到原生的数组
push 方法:push 方法具有通用性。该方法和 call 或者 apply 一起使用时,可应用在类数组的对象上。push 方法根据 length 属性来决定从哪里开始插入给定的值。如果 length 属性不能被转成要给数值,则插入的元素索引为 0 ,包括 length 不存在时。当 length 属性不存在时,将会创建它。唯一的原生类数组(array like)对象是 String ,尽管如此,他们并不适用该方法,因为字符串是不可改变的。
对象转数组的方式:Array.form(),splice(),concat(),[...array]等
解析:
这个obj中定义了两个 key 值,分别为 splice 和 push。分别对应数组原型中的 splice 和 push 方法,因此这个 obj 可以调用数组中的 push 和 splice 方法
调用对象的 push 方法: push(1),因为此时 obj 中定义的 length 为 2 ,所以从数组索引为 2 的位置开始插入,也就是数组的第三项,因为数组索引是从 0 开始的,这时已定义了下标为 2 和 3 的两项('2':3,'3':4,),所以 push(1) 会替换下标为 2 的一项,push(2) 会替换掉索引下标为 3 的一项。此时 key 为 2 的属性值为 1 ,key 为 3 的属性值为 2 。
此时的输出结果就是:Object(4) [empty × 2, 1, 2, splice: ƒ, push: ƒ]。
因为只是定义了 2 和 3 两项,没有定义 0 和 1 两项,所以前面会是 empty。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值