有人可以解释这种行为吗?const obj = {};obj[0] = 0;console.log(obj['0']); // 0obj[0.1] = 0.1;console.log(obj['0.1']); // 0.1obj[1.0] = 1.0;console.log(obj['1.0']); // undefined似乎javascript将字符串整数转换为整数,但不完全是它在计算中的工作方式。由于 string'1.0'应该与1.也可以为数字0和字符串的一个对象设置 2 个不同的属性"0"吗?在进行对象查找时,我可以避免 javascript 将字符串转换为数字吗?
1 回答
![?](http://img1.sycdn.imooc.com/545863aa00014aa802200220-100-100.jpg)
慕勒3428872
TA贡献1848条经验 获得超6个赞
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'两者计算结果为属性名'0'。
添加回答
举报
0/150
提交
取消