本文主要是介绍js面试题-对象添加length属性伪装成数组进行操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
以下代码执行后打印的结果是什么?
var obj = {'2': 3,'3': 4,'length': 2,'splice': Array.prototype.splice,'push': Array.prototype.push,
}
obj.push(1);
obj.push(2);
console.log(obj)
先看一下未进行任何操作的obj:
操作后打印结果如下:
知识点:
- 类数组(typedArray):指具有数字索引且带有 length 属性的对象。
- push:方法可向数组的末尾添加一个或多个元素,并返回新的长度。注:该方法会改变数组的长度。
① push 方法具有通用性。该方法和 call 或者 apply 一起使用时,可应用在类数组对象上。
② push 方法根据 length 属性来决定从哪里开始插入给定的值。
③ 如果 length 属性不能被转成数值,则执行push方法时插入的元素索引位置为 0。
④ 如果 length 属性不存在,则执行push方法时会自动创建它。 - 当对象带有数组的 splice 方法并且 length 属性的值可以转为数值时,对象将会被当做数组打印。
解析:
这个obj中定义了两个 key 值,分别为 splice 和 push,分别对应数组原型中的 splice 和 push 方法,因此这个 obj 可以调用数组中的 push 和 splice 方法。
调用对象的 push 方法: obj.push(1)
,因为此时 obj 中 { length:2 }
,所以从索引为2的位置开始插入,也就是数组的第三项。因为数组索引是从0开始的,这时已定义了索引2和3的两项{ '2':3, '3':4 }
,所以 obj.push(1)
会替换下标为2的一项,此时{length:3}
;obj.push(2)
会替换掉索引下标为3的一项,此时{length:4}
。
此时索引2和3的两项为 { '2':1, '3':2 }
。输出结果就是:Object(4) [empty × 2, 1, 2, splice: ƒ, push: ƒ]
。因为只是定义了2和3两项,没有定义0和1两项,所以前面两项是 empty。
这篇关于js面试题-对象添加length属性伪装成数组进行操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!