使用+=
运算符为某个属性分配一个数字,在JavaScript中为我提供NaN
。
此代码按预期工作:
> var result = {};
undefined
> result['value'] = 10;
10
> result['value'] += 10;
20
但是我们得到NaN
:
> var test = {};
undefined
> test['value'] += 10;
NaN
为什么JavaScript的行为如此?如何在不初始化result['value'] = 0
的情况下使其工作?
答案 0 :(得分:10)
此行test['value'] += 10
等于test['value'] = undefined + 10
,即NaN
(非数字)。
答案 1 :(得分:5)
这是因为您尝试将10
添加到对象的undefined
属性中,因此您的行会导致:
test['value'] = undefined + 10; // NaN
导致未知值的每个数字表达式都会变成JavaScript中的NaN
(不是数字)。为了使它工作,你应该检查该属性是否存在并具有数值,然后添加一些数字;否则你必须创建它。此外,由于您正在使用对象,因此您可以使用test.value
代替test['value']
。
以下是一个例子:
if (Number(test.value)) test.value += 10;
else test.value = 10;
// Or more neatly:
test.value = +test.value ? test.value + 10 : 10;
答案 2 :(得分:3)
因为test['value']
是undefined
。将号码添加到undefined
将为您提供NaN
(代表“非数字”)。您需要在添加之前初始化值:
var test = {};
test['value'] = 0;
test['value'] += 10;
由于您使用的是对象,因此您也可以使用点符号:
var test = {};
test.value = 0;
test.value += 10;
答案 3 :(得分:2)
您无法在JavaScript中向undefined
添加数字。如果您不想初始化数字,则需要test if it's undefined
才能递增它:
test['value'] = (typeof test['value']==='undefined') ? 10 : test['value']+10;
答案 4 :(得分:1)
test['value'] += 10;
相当于
test['value'] = test['value'] + 10;
但是,test['value']
未定义,因为您尚未对其进行初始化
答案 5 :(得分:0)
在添加值之前检查测试值是否未定义:
test['value']? test['value']+=10 : test['value']=10
答案 6 :(得分:0)
为什么JavaScript的行为如此?
因为当该属性不存在时,访问它默认为undefined
;在向undefined
添加号码时,您会收到NaN
。
如何在不初始化
result['value'] = 0
的情况下使其工作?
如果您不想(或不能)初始化一次,您需要每次检查该属性是否存在,基本上:
test.value = ('value' in test ? test.value : 0) + 10;
另一种方法是在添加属性之前每次将属性转换为数字:
test.value |= 0;
test.value += 10;
答案 7 :(得分:0)
因为不能添加NaN。您需要输入数字才能使用+ =