如果我运行以下javascript代码,浏览器会提醒“undefinedabc”。
var x;
x += "abc";
alert(x);
对我来说,看起来我确实定义了变量x,为什么它似乎未定义?
答案 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”。