千家信息网

JavaScript数组面试题实例分析

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,今天小编给大家分享一下JavaScript数组面试题实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面
千家信息网最后更新 2025年02月02日JavaScript数组面试题实例分析

今天小编给大家分享一下JavaScript数组面试题实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

晚上下班的时候,我们又开始讨论无聊的问题。一个同事提出以下奇异的场景,听说是一道面试题:

var o = { 1:'a' ,2:'b' ,length:2 ,push:Array.prototype.push }; o.push('c');

同事:O现在内部的值是什么模样?

我的第一反应是排挤,为何要研究不公道情况下【解释引擎】的行动?但是这类推论有时候又很吸引人,因而我回来的时候仔细思考了下,发现其实很简单。

对 push 这个方法,我条件反射地想到的就是栈,【数据结构的经典栈】中压栈和弹栈操作根据的都是栈顶指针,栈顶指针始终指向栈顶,意味着它会由于压弹栈而自动增减。在 javascript 中的数组中这个指针就是 length。所以在上面的代码中,o.push('c') 就是 o.2 = 'c'(固然 o.2 不能直接访问,这只是伪代码),所以代码履行完 o 中数据以下:

{ 1:'a' ,2:'c' ,length:3 //push操作=>length+1 ,push:Array.prototype.push }

补充说明:

JavaScript 中,万物皆对象,而 javascript 的对象与强类型的对象有一些不同的地方,可以理解成绩是一组键值对的集合。其 array 类型也不例外,它的下标访问就是键访问(不过它的键都是自然数),在上面的例子中赋值给 a 的对象字面量实际摹拟了一个数组(一个下标从一开始的数组)--固然只有部份数组的特性,比如真实的数组在进行键访问的时候,会根据 length 进行越界检查。

只要知道 push 的位置根据的是 length 就能够了,下面种种看似奇怪的现象都好理解:

//1.length不存在,引擎置为
0 var o = { '1':'a' ,'2':'b' ,push:Array.prototype.push };
o.push('c');//c {0:'c',1:'a',2:'b',...}
//2.length为负值,这是个有趣的问题,触及到原码反码和补码【1】 var o = { '1':'a' ,'2':'b' ,length:⑴ ,push:Array.prototype.push };
o.push('c');
//c {1:'a',2:'b',4294967295:'c',length:4294967296,...}
//3.length为字符或对象
var o = { 1:'a' ,2:'b' ,length:'A' ,push:Array.prototype.push };
o.push('c');
//c {0:'c',1:'a',2:'b',length:1,...}
我还以为js解释器会把A转换成ASCII码来给length赋值呢,终究看到了javascript的自由还是有节操的

【1】:计算机中数值都是以补码方式存储的,为了方便运算,⑴的补码与4294967295补码一样,根据 length 的语义,此处是无符号数

[⑴]补 = 1111 1111 1111 1111 1111 1111 1111 1111 = [4294967295]补
所以这样我们接差对2中的O压入一个对象,key 取的是4294967296,但是数组的最大长度限制为 4294967296,也就是说下标只能取到 4294967295,只会取到 32位 ――对 4294967296 = 1 0000 0000 0000 0000 0000 0000 0000 0000 取后 32 位,就变成了0,所以此次 push 的位置是 0。

以上就是"JavaScript数组面试题实例分析"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

数组 对象 就是 知识 篇文章 补码 下标 代码 指针 时候 面的 实例 实例分析 分析 不同 位置 内容 同事 引擎 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发的人工系统描述 行星边际2有哪些服务器 在哪找数据库的表设计器 黑龙江旅游职业技术学院网络技术 上海安装软件开发预算 我的世界创造服务器网易版 绝地求生未来之翼服务器被搞崩了 刘家沟湾煤矿网络安全培训课 招行软件开发待遇怎么样 华为网络技术工程师面经 茂名数字软件开发平均价格 查询数据库日期数据 软件开发财务分析结论 苏州推广网络技术报价 上海原链网络技术有限公司 现代化网络技术批量定制 山东易速网络技术有限公司 宝山区创新软件开发定制介绍 mysql日志恢复数据库 大兴区网络安全学院 重启受管理的服务器 汕头软件开发就业 江西pdu服务器专用电源生产厂 确认工作贯穿软件开发 乐陵软件开发哪家强 网络安全法的适用范围是多少 青岛交易软件开发教程 服务器两U说的是什么 数据库 添加属性 网络技术 前沿技术
0