如果我运行以下JavaScript代码,浏览器会警告“undefinedabc”。为什么JavaScript中的变量似乎保留值“undefined”,即使它被定义为
var x;
x += "abc";
alert(x);
对我来说,看起来好像我确实定义了变量x,为什么它看起来没有定义?
如果我运行以下JavaScript代码,浏览器会警告“undefinedabc”。为什么JavaScript中的变量似乎保留值“undefined”,即使它被定义为
var x;
x += "abc";
alert(x);
对我来说,看起来好像我确实定义了变量x,为什么它看起来没有定义?
undefined
是没有赋值的任何变量的默认值。因此,var x;
表示a = undefined
。当你添加时,你实际上在做undefined + "abc"
。最后,undefined
被字符串分割为"undefined"
,然后连接到并转向"undefinedabc"
。
为了Concat的初始化VAR x
,你应该分配一个空字符串给它(记住,JavaScript的dinamically类型的):
var x = '';
x += "abc";
alert(x); // "abc"
This MDN article描述了这种行为。
我会接受这个答案,因为你指出我undefined是一个变量的默认值。 – Tom
很高兴帮助。谢谢 :) –
var x = "";
x += "abc";
alert(x);
试试这个。您正尝试添加'abc'
和undefined
,这将导致undefinedabc
。
首先检查一个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)"
因此,既然是一个字符串,x
将被翻译为一个字符串,根据的ToString。正如我们从上面所知,x是未定义的。
最后,检查抽象操作ToString的行为,特别是未定义的参数导致字符串“undefined”。
不要混淆声明和定义 – Eric
只要你不给它赋值,它的值就是“undefined”。如果你在字符串中使用'+ =',它将总是使用'old'字符串值并将新的字符串附加到它。不过,“旧”字符串值是“未定义的”。 – devnull69
谢谢Eric,我确实犯了这个错误。 – Tom