javascript - javascript 数字属性名称究竟是如何工作的?
问题描述
有人可以解释这种行为吗?
const obj = {};
obj[0] = 0;
console.log(obj['0']); // 0
obj[0.1] = 0.1;
console.log(obj['0.1']); // 0.1
obj[1.0] = 1.0;
console.log(obj['1.0']); // undefined
似乎javascript将字符串整数转换为整数,但不完全是它在计算中的工作方式。由于 string'1.0'
应该与1
.
也可以为数字0
和字符串的一个对象设置 2 个不同的属性"0"
吗?在进行对象查找时,我可以避免 javascript 将字符串转换为数字吗?
解决方案
JavaScript 属性名称都是字符串。
在这一行:
obj[1.0] = 1.0;
1.0
首先被强制为字符串值'1'
,然后1.0
被赋值给obj['1']
.
如果您传入一个数字而不是字符串 value ,您可以以同样的方式检索它1.0
。相同的字符串转换将应用于属性检索:
const obj = {};
obj[1.0] = 1.0;
console.log(obj[1.0]); // 1
但是,属性名称是字符串的事实在这里有点无关紧要。即使它具有实际的数字属性名称,1.0
也会计算为数字1
,并且无论如何都会分配值obj[1]
。
是否可以为一个数字 0 和字符串“0”的对象设置 2 个不同的属性?在进行对象查找时,我可以避免 javascript 将字符串转换为数字吗?
不,0
两者'0'
都评估为属性 name '0'
。
推荐阅读
- css - ReactJs 改变 css 属性 onclick
- vue.js - Vue.js 2:范围样式不适用于 sass/scss
- python - 熊猫在添加新列时覆盖不同的数据框
- mysql - 无服务器框架、打字稿、nodejs 和 mysql - 错误:接收到的数据包顺序错误
- javascript - Javascript 会在执行前简化语句吗?
- swift - Mac OS:在查找器属性中显示自定义文件大小并在没有内核的情况下获取信息
- android - 使 ListView 平滑滚动
- html - 使所有 div 大小相同 CSS Flex
- ionic3 - 单击选项卡有时会显示错误的页面
- sql - 如何编写一个 ActiveRecord 范围来返回最近创建的 2 条属于其父级的记录?