使用 += 赋值在 javascript 中给出 NaN
Assigning using += gives NaN in javascript
使用 +=
运算符为属性分配一个数字在 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
的情况下让它工作?
这一行 test['value'] += 10
等于 test['value'] = undefined + 10
,即 NaN
(不是数字)。
因为test['value']
是undefined
。将一个数字添加到 undefined
将得到 NaN
(代表 "Not a Number")。您需要在添加之前初始化该值:
var test = {};
test['value'] = 0;
test['value'] += 10;
由于您使用的是对象,因此您还可以使用点符号:
var test = {};
test.value = 0;
test.value += 10;
test['value'] += 10;
相当于
test['value'] = test['value'] + 10;
但是,test['value']
是未定义的,因为你还没有初始化它
发生这种情况是因为您试图将 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;
在添加值之前检查测试值是否未定义:
test['value']? test['value']+=10 : test['value']=10
您不能在 JavaScript 中向 undefined
添加数字。如果你不想初始化数字,你需要在递增之前test if it's undefined
:
test['value'] = (typeof test['value']==='undefined') ? 10 : test['value']+10;
Why does JavaScript behave like this?
因为当属性不存在时,默认访问undefined
;当向 undefined
添加数字时,您会得到 NaN
。
How can I get this to work without initializing result['value'] = 0
?
如果你不想(或不能)初始化一次,你需要每次都检查属性是否存在,基本上:
test.value = ('value' in test ? test.value : 0) + 10;
另一种方法是在每次添加之前将 属性 转换为一个数字:
test.value |= 0;
test.value += 10;
因为无法添加 NaN。您需要有一个数字才能使用 +=
使用 +=
运算符为属性分配一个数字在 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
的情况下让它工作?
这一行 test['value'] += 10
等于 test['value'] = undefined + 10
,即 NaN
(不是数字)。
因为test['value']
是undefined
。将一个数字添加到 undefined
将得到 NaN
(代表 "Not a Number")。您需要在添加之前初始化该值:
var test = {};
test['value'] = 0;
test['value'] += 10;
由于您使用的是对象,因此您还可以使用点符号:
var test = {};
test.value = 0;
test.value += 10;
test['value'] += 10;
相当于
test['value'] = test['value'] + 10;
但是,test['value']
是未定义的,因为你还没有初始化它
发生这种情况是因为您试图将 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;
在添加值之前检查测试值是否未定义:
test['value']? test['value']+=10 : test['value']=10
您不能在 JavaScript 中向 undefined
添加数字。如果你不想初始化数字,你需要在递增之前test if it's undefined
:
test['value'] = (typeof test['value']==='undefined') ? 10 : test['value']+10;
Why does JavaScript behave like this?
因为当属性不存在时,默认访问undefined
;当向 undefined
添加数字时,您会得到 NaN
。
How can I get this to work without initializing
result['value'] = 0
?
如果你不想(或不能)初始化一次,你需要每次都检查属性是否存在,基本上:
test.value = ('value' in test ? test.value : 0) + 10;
另一种方法是在每次添加之前将 属性 转换为一个数字:
test.value |= 0;
test.value += 10;
因为无法添加 NaN。您需要有一个数字才能使用 +=