您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
获取js对象的成员,obj.attr和obj["attr"]这两种方式的效率一样吗?
属性,性能,括号获取js对象的成员,obj.attr和obj["attr"]这两种方式的效率一样吗?
发布时间:2019-02-08加入收藏来源:互联网点击:
获取js对象的成员,obj.attr和obj["attr"]这两种方式的效率一样吗?
回答于 2019-09-11 08:43:50
回答于 2019-09-11 08:43:50
结论:根据不同的浏览器,这两种方式执行效率也不一样。
但是这两种使用方法还是有区别的。
[]可以用变量作为属性名访问,而点不行
[]可以用数字作为属性访问,但点不行
[]可以动态访问属性名,可以在程序运行时创建和修改
[]里面的表示可以有导致语法错误的字符,也可以是关键字
回答于 2019-09-11 08:43:50
在控制台跑一百万次试试呗。
chrome下,看不出差距。百万次赋值取值大约都在5毫秒上下。
结论:不用纠结区别。
回答于 2019-09-11 08:43:50
如果这样的代码运行在服务器上,且每天有几千万的请求访问到,非常建议使用点号,而且在debug的时候,点号的方式可以鼠标悬浮查看结果,中括号的不可以。如果对象的属性不是用变量去获取,建议使用点号获取对象属性
回答于 2019-09-11 08:43:50
性能一致,第二种方式多了三个字符,会增加代码体积,如果所有属性访问都用第二种,体积会增加不少
回答于 2019-09-11 08:43:50
不要纠结这种性能没差,语法又不是很啰嗦的区别。爱用哪个用哪个。而且随着时间推移,浏览器制造商会根据使用频率来优化各种built-in。也就是说几年前性能最好的选择,可能现在就没必要了,或者被另一个当年性能没那么好的选择取代(为什么会这样的原因有很多,比如好优化,用的人多,KPI项目等等)。随便两个例子,splice在2019年以前,性能奇差,对性能要求高的项目能不用就不用,但是从2019年开始,splice的性能不断被提高,现在在大多数浏览器里,splice的性能在特定操作(数组元素首插入,尾插入,中间插入等)的所有方法里都排在前三的位置。另一个是forEach/map/reduce这些语法糖,也是2018年前后,这些性能和原生for循环的差距很大。但是现在,对于中等规模的数据(10万条以下)遍历基本感觉不到差别。
回答于 2019-09-11 08:43:50
读取和设置对象属性有两种写法:
1、(.)点操作符:静态的。右侧必须是一个以属性名称命名的简单标识符。属性名用一个标识符来表示。标识符必须直接出现再js程序中,它们不是数据类型,因此程序无法修改它们。
2、([ ])中括号操作符:动态的。方括号里必须是一个计算结果为字符串的表达式,属性名通过字符串表示。字符串是js的数据类型,在程序运行时可以修改和创建它们。
主要有以下区别:
1、([ ])可以用变量作为属性名或访问,而点方法不可以
2、[ ]中括号法--可以用数字作为属性名,而点语法不可以;
3, [] 可以动态访问的属性名,可以在程序运行时创建和修改属性,点操作符就不行!
( 即 []--可以动态设置和获取)
4,如果属性名中包含会导致语法错误的字符,或者属性名是关键字或者保留字,也可以使用方括号表示法。
//如:(属性名有空格,请使用方括号 [] )
简单利用:在数组原型链上增加一个去重得的方法,并能实现链式写法。
希望这点回答能够帮助你
回答于 2019-09-11 08:43:50
运行效率其实都差不多,js本身就是动态脚本语言,属性和方法都会保存到自己的scope里面,map或者hash表类似的数据类型。执行的时候会根据点号后面的名字或者括号里面的名字去查找,如果找到就返回该属性或方法,找不到返回undefined。区别正如前面某些大佬所说,中括号里面的key可以有空格或者是纯数字,而.号属性不可以,因为不是合法的标识符,这是在编译阶段就被pass了,不是执行阶段。
上一篇:青春期孩子比较瘦,为了减肥中午11点就午睡,正常吗?
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |