为什么javascript中的变量似乎保持值“undefined”,即使它被定义

时间:2014-02-20 13:34:05

标签: javascript

如果我运行以下javascript代码,浏览器会提醒“undefinedabc”。

var x;
x += "abc";
alert(x);

对我来说,看起来我确实定义了变量x,为什么它似乎未定义?

3 个答案:

答案 0 :(得分:5)

var x = "";
x += "abc";
alert(x);

试试这个。您正尝试添加'abc'undefined,这将导致undefinedabc

答案 1 :(得分:5)

undefined是没有赋值的任何变量的默认值。因此,var x;表示a = undefined。当您向其添加"abc"时,您实际上正在执行undefined + "abc"。最后,undefined"undefined"的字符串,然后连接到"abc"并转到"undefinedabc"

为了连续初始化var x,你应该给它分配一个空字符串(记住这是一个dinamically-typed的JavaScript):

var x = '';
x += "abc";
alert(x);    // "abc"

This MDN article描述了这种行为。

答案 2 :(得分:1)

首先检查Variable Statement的行为,具体来说:

"Variables are initialised to undefined when created."

然后检查addition operator的行为(compound assignment应用与=之前的内容相对应的运算符的行为。

具体来说,第7点:

"If Type(lprim) is String or Type(rprim) is String, then
Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim)"

因此,由于"abc"是一个字符串,因此根据ToString将x转换为String。正如我们从上面所知,x是未定义的。

最后,检查抽象操作ToString的行为,具体来说,未定义的参数会导致字符串“undefined”。