社会热点

获取js对象的成员,obj.attr和obj[ quot;attr quot;]这两种方式的效率一样吗?

电脑版   2020-11-26 07:27  

获取js对象的成员,obj.attr和obj[attr]这两种方式的效率一样吗?:结论:根据不同的浏览器,这两种方式执行效率也不一样。但是这两种使用方法还是有区别的。[]可

1

结论:根据不同的浏览器,这两种方式执行效率也不一样。

但是这两种使用方法还是有区别的。

[]可以用变量作为属性名访问,而点不行

[]可以用数字作为属性访问,但点不行

[]可以动态访问属性名,可以在程序运行时创建和修改

[]里面的表示可以有导致语法错误的字符,也可以是关键字

2

在控制台跑一百万次试试呗。

chrome下,看不出差距。百万次赋值取值大约都在5毫秒上下。

结论:不用纠结区别。

3

性能一致,第二种方式多了三个字符,会增加代码体积,如果所有属性访问都用第二种,体积会增加不少

4

如果这样的代码运行在服务器上,且每天有几千万的请求访问到,非常建议使用点号,而且在debug的时候,点号的方式可以鼠标悬浮查看结果,中括号的不可以。如果对象的属性不是用变量去获取,建议使用点号获取对象属性

5

不要纠结这种性能没差,语法又不是很啰嗦的区别。爱用哪个用哪个。而且随着时间推移,浏览器制造商会根据使用频率来优化各种built-in。也就是说几年前性能最好的选择,可能现在就没必要了,或者被另一个当年性能没那么好的选择取代(为什么会这样的原因有很多,比如好优化,用的人多,KPI项目等等)。随便两个例子,splice在2019年以前,性能奇差,对性能要求高的项目能不用就不用,但是从2019年开始,splice的性能不断被提高,现在在大多数浏览器里,splice的性能在特定操作(数组元素首插入,尾插入,中间插入等)的所有方法里都排在前三的位置。另一个是forEach/map/reduce这些语法糖,也是2018年前后,这些性能和原生for循环的差距很大。但是现在,对于中等规模的数据(10万条以下)遍历基本感觉不到差别。

6

读取和设置对象属性有两种写法:

1、(.)点操作符:静态的。右侧必须是一个以属性名称命名的简单标识符。属性名用一个标识符来表示。标识符必须直接出现再js程序中,它们不是数据类型,因此程序无法修改它们。

2、([ ])中括号操作符:动态的。方括号里必须是一个计算结果为字符串的表达式,属性名通过字符串表示。字符串是js的数据类型,在程序运行时可以修改和创建它们。

主要有以下区别:

1、([ ])可以用变量作为属性名或访问,而点方法不可以

2、[ ]中括号法--可以用数字作为属性名,而点语法不可以;

3, [] 可以动态访问的属性名,可以在程序运行时创建和修改属性,点操作符就不行!

( 即 []--可以动态设置和获取)

4,如果属性名中包含会导致语法错误的字符,或者属性名是关键字或者保留字,也可以使用方括号表示法。

//如:(属性名有空格,请使用方括号 [] )

简单利用:在数组原型链上增加一个去重得的方法,并能实现链式写法。

希望这点回答能够帮助你

7

这要看浏览器怎么解析。

8

快属性,慢属性

9

运行效率其实都差不多,js本身就是动态脚本语言,属性和方法都会保存到自己的scope里面,map或者hash表类似的数据类型。执行的时候会根据点号后面的名字或者括号里面的名字去查找,如果找到就返回该属性或方法,找不到返回undefined。区别正如前面某些大佬所说,中括号里面的key可以有空格或者是纯数字,而.号属性不可以,因为不是合法的标识符,这是在编译阶段就被pass了,不是执行阶段。

本文版权归原作者所有,如需商业用途或转载请与原作者联系。

分享

相关信息
 
李靓蕾会原谅王力宏吗

2021-12-30 14:01:01