使用+ =分配在javascript中给出NaN

jsb*_*sht 3 javascript nan compound-assignment

使用+=运算符为属性赋值给了我NaNJavaScript.

此代码按预期工作:

> var result = {};
undefined
> result['value'] = 10;
10
> result['value'] += 10;
20
Run Code Online (Sandbox Code Playgroud)

但是我们得到NaN:

> var test = {};
undefined
> test['value'] += 10;
NaN
Run Code Online (Sandbox Code Playgroud)

为什么JavaScript的行为如此?如何在不初始化的情况下使其工作result['value'] = 0

Lew*_*wis 11

此行test['value'] += 10等于test['value'] = undefined + 10,NaN(非数字).

  • 但是你没有告诉OP如何解决他的问题. (4认同)
  • 一个好主意,但应该通过评论完成.提交答案时,您应该"回答"整个问题. (2认同)

Bla*_*ger 6

您不能undefined在 JavaScript 中添加数字。如果你不想初始化数字,你需要在增加它之前测试它undefined是否:

test['value'] = (typeof test['value']==='undefined') ? 10 : test['value']+10;
Run Code Online (Sandbox Code Playgroud)


Mar*_*lli 5

这是因为您尝试添加10undefined对象的属性,因此您的行将导致执行:

test['value'] = undefined + 10; // NaN
Run Code Online (Sandbox Code Playgroud)

导致未知值的每个数字表达式NaN在JavaScript中变为(而不是数字).为了使它工作,你应该检查该属性是否存在并具有数值,然后添加一些数字; 否则你将不得不创建它.另外,既然您正在使用对象,则可以使用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;
Run Code Online (Sandbox Code Playgroud)