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

时间:2015-02-06 14:17:25

标签: javascript nan compound-assignment

使用+=运算符为某个属性分配一个数字,在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的情况下使其工作?

8 个答案:

答案 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。您需要输入数字才能使用+ =