为什么javascript中的变量似乎包含值“quot;“未定义”;即使它被定义了

为什么javascript中的变量似乎包含值“quot;“未定义”;即使它被定义了,javascript,Javascript,如果我运行以下javascript代码,浏览器会发出“UnfinedABC”警报 对我来说,它看起来像是我定义了变量x,那么为什么它看起来是未定义的呢 var x = ""; x += "abc"; alert(x); 试试这个。您正在尝试添加'abc'和未定义的,这将导致未定义的未定义的是任何未赋值变量的默认值。因此,var x表示a=未定义。当您向它添加“abc”时,实际上您正在执行未定义+“abc”。最后,undefined被字符串化为“undefined”,然后连接到“abc”,并转到

如果我运行以下javascript代码,浏览器会发出“UnfinedABC”警报

对我来说,它看起来像是我定义了变量x,那么为什么它看起来是未定义的呢

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

试试这个。您正在尝试添加
'abc'
未定义的
,这将导致
未定义的
未定义的
是任何未赋值变量的默认值。因此,
var x
表示
a=未定义
。当您向它添加
“abc”
时,实际上您正在执行
未定义+“abc”
。最后,
undefined
被字符串化为
“undefined”
,然后连接到
“abc”
,并转到
“undefinedabc”

为了初始化var
x
,您应该为其分配一个空字符串(请记住JavaScript是按字母顺序键入的):


描述此行为。

首先检查a的行为,特别是:

"Variables are initialised to undefined when created."
然后检查的行为(将运算符的行为应用于前面的操作)

具体而言,第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)"
因此,根据ToString,由于“abc”
是一个字符串,
x
将被转换为字符串。x、 正如我们从上面所知道的,是未定义的


最后,检查抽象操作的行为,特别是,未定义的参数会导致字符串“未定义”。

不要将声明与定义混淆。只要不给它赋值,它的值就是“未定义”。如果将
+=
与字符串一起使用,则它将始终获取
旧的
字符串值,并将新值附加到该字符串中。但是,
old
字符串值是“未定义的”。谢谢Eric,我确实犯了那个错误。
x
变量已定义。它的初始值不是。我会接受这个答案,因为您向我指出,undefined是变量的默认值。很高兴为您提供帮助。谢谢:)
"Variables are initialised to undefined when created."
"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)"