首页 > 解决方案 > 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

解决方案


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'


推荐阅读