js面试题-对象添加length属性伪装成数组进行操作

2024-03-31 20:38

本文主要是介绍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:
在这里插入图片描述

操作后打印结果如下:
在这里插入图片描述
知识点:

  1. 类数组(typedArray):指具有数字索引且带有 length 属性的对象。
  2. push:方法可向数组的末尾添加一个或多个元素,并返回新的长度。注:该方法会改变数组的长度。
    ① push 方法具有通用性。该方法和 call 或者 apply 一起使用时,可应用在类数组对象上。
    push 方法根据 length 属性来决定从哪里开始插入给定的值。
    ③ 如果 length 属性不能被转成数值,则执行push方法时插入的元素索引位置为 0。
    ④ 如果 length 属性不存在,则执行push方法时会自动创建它。
  3. 当对象带有数组的 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属性伪装成数组进行操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/865286

相关文章

Nginx如何进行流量按比例转发

《Nginx如何进行流量按比例转发》Nginx可以借助split_clients指令或通过weight参数以及Lua脚本实现流量按比例转发,下面小编就为大家介绍一下两种方式具体的操作步骤吧... 目录方式一:借助split_clients指令1. 配置split_clients2. 配置后端服务器组3. 配

Java实现将byte[]转换为File对象

《Java实现将byte[]转换为File对象》这篇文章将通过一个简单的例子为大家演示Java如何实现byte[]转换为File对象,并将其上传到外部服务器,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言1. 问题背景2. 环境准备3. 实现步骤3.1 从 URL 获取图片字节数据3.2 将字节数组

SpringBoot操作MaxComputer方式(保姆级教程)

《SpringBoot操作MaxComputer方式(保姆级教程)》:本文主要介绍SpringBoot操作MaxComputer方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录引言uqNqjoe一、引入依赖二、配置文件 application.properties(信息用自己

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

HTML5 data-*自定义数据属性的示例代码

《HTML5data-*自定义数据属性的示例代码》HTML5的自定义数据属性(data-*)提供了一种标准化的方法在HTML元素上存储额外信息,可以通过JavaScript访问、修改和在CSS中使用... 目录引言基本概念使用自定义数据属性1. 在 html 中定义2. 通过 JavaScript 访问3.

Python使用DeepSeek进行联网搜索功能详解

《Python使用DeepSeek进行联网搜索功能详解》Python作为一种非常流行的编程语言,结合DeepSeek这一高性能的深度学习工具包,可以方便地处理各种深度学习任务,本文将介绍一下如何使用P... 目录一、环境准备与依赖安装二、DeepSeek简介三、联网搜索与数据集准备四、实践示例:图像分类1.

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

C#中的 Dictionary常用操作

《C#中的Dictionary常用操作》C#中的DictionaryTKey,TValue是用于存储键值对集合的泛型类,允许通过键快速检索值,并且具有唯一键、动态大小和无序集合的特性,常用操作包括添... 目录基本概念Dictionary的基本结构Dictionary的主要特性Dictionary的常用操作