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(非数字).
您不能undefined在 JavaScript 中添加数字。如果你不想初始化数字,你需要在增加它之前测试它undefined是否:
test['value'] = (typeof test['value']==='undefined') ? 10 : test['value']+10;
Run Code Online (Sandbox Code Playgroud)
这是因为您尝试添加10到undefined对象的属性,因此您的行将导致执行:
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)
| 归档时间: |
|
| 查看次数: |
3435 次 |
| 最近记录: |