除了分配混乱,还是JavaScript

除了分配混乱,还是JavaScript,javascript,Javascript,,加法赋值运算符 将右操作数的值添加到变量 并将结果分配给变量。两个操作数的类型决定加法的行为。 下面是添加的行为: 如果两个表达式都是数字,则添加。 如果两个表达式都是字符串,则连接。 如果表达式是数字,而另一个是字符串,则连接。 基本上,text+=i与text=text+i相同;这是事实 好的,如果上面是真的,那么为什么在下面的代码版本2中,当我将字符串变量化时,数字是变量文本, 它不是每次都像代码版本1那样用新的数字写字符串吗 至于答案,我不想用另一种方式来写。我需要弄清楚,如果text

,加法赋值运算符 将右操作数的值添加到变量 并将结果分配给变量。两个操作数的类型决定加法的行为。 下面是添加的行为:

如果两个表达式都是数字,则添加。 如果两个表达式都是字符串,则连接。 如果表达式是数字,而另一个是字符串,则连接。 基本上,text+=i与text=text+i相同;这是事实

好的,如果上面是真的,那么为什么在下面的代码版本2中,当我将字符串变量化时,数字是变量文本, 它不是每次都像代码版本1那样用新的数字写字符串吗

至于答案,我不想用另一种方式来写。我需要弄清楚,如果text+=I与text=text+I相同,为什么它的工作方式不同

我每天都在学习JavaScript,但信不信由你,这个简单的+=阻碍了我对它的进一步理解,因为太多的例子都在使用+=

以下是代码版本1:

JavaScript循环

var text=; var i; 对于i=0;i<5;i++{ text+=数字为+i+; } document.getElementByIddemo.innerHTML=text;
对于这样的问题,使用console.log查看发生了什么非常有帮助

var text ="";
var i;
console.log("First approach");
for (i = 0; i < 5; i++) {
    text += "The number is " + i + "<br>";
    console.log("Iteration: "+i+" Text: "+text);
}

console.log("Second approach");
text ="The number is ";
for (i = 0; i < 5; i++) {
    text = text + i + "<br>";
    console.log("Iteration: "+i+" Text: "+text);
}

代码的运行方式不同,因为在第一种情况下,连接数字的整个字符串是。。。在第二种情况下,用数字is初始化字符串,然后只连接数字。

对于这样的问题,使用console.log查看发生了什么非常有用

var text ="";
var i;
console.log("First approach");
for (i = 0; i < 5; i++) {
    text += "The number is " + i + "<br>";
    console.log("Iteration: "+i+" Text: "+text);
}

console.log("Second approach");
text ="The number is ";
for (i = 0; i < 5; i++) {
    text = text + i + "<br>";
    console.log("Iteration: "+i+" Text: "+text);
}

代码的运行方式不同,因为在第一种情况下,连接数字的整个字符串是。。。在第二种情况下,用数字is初始化字符串,然后只连接数字。

您正在编写不同的代码

a=a+b确实与a+=b相同

同:

var text = "";
text = text + "The number is " + i + "<br>";
var text = "The number is ";
text = text + i + "<br>";
但这与:

var text = "";
text = text + "The number is " + i + "<br>";
var text = "The number is ";
text = text + i + "<br>";

这就是您所拥有的。

您正在编写不同的代码

a=a+b确实与a+=b相同

同:

var text = "";
text = text + "The number is " + i + "<br>";
var text = "The number is ";
text = text + i + "<br>";
但这与:

var text = "";
text = text + "The number is " + i + "<br>";
var text = "The number is ";
text = text + i + "<br>";

这就是你所拥有的。

TL;博士当你添加一个字符串和一个数字时,你总是以一个字符串结束,不管发生什么,总是。如果你加一个数字。。。一个数字,你就得到一个数字。当你在混音中加入一个字符串,字符串是任何带引号的东西,你会得到。。。一个string.def理解那部分不是我要问的…我要问的是a+=b是否与a=a+b相同为什么我的代码与text+=i和text=text+IB不一样,因为在第二个循环中,每次循环时,文本都是不同的,而数字总是相同的。您没有执行相同的操作。如果你想要同样的东西,那么第二个需要是text=text+数字是+i+;未分配var text=数字为;首先,是的,这些都是一样的。但是,在一个示例中,数字在循环内,因此它会多次添加,而在另一个示例中,数字在循环外,只添加一次。TL;博士当你添加一个字符串和一个数字时,你总是以一个字符串结束,不管发生什么,总是。如果你加一个数字。。。一个数字,你就得到一个数字。当你在混音中加入一个字符串,字符串是任何带引号的东西,你会得到。。。一个string.def理解那部分不是我要问的…我要问的是a+=b是否与a=a+b相同为什么我的代码与text+=i和text=text+IB不一样,因为在第二个循环中,每次循环时,文本都是不同的,而数字总是相同的。您没有执行相同的操作。如果你想要同样的东西,那么第二个需要是text=text+数字是+i+;未分配var text=数字为;首先,是的,这些都是一样的。但是,在一个示例中,数字在循环内,因此它会多次添加,而在另一个示例中,数字在循环外,只添加一次。如果第三种方法不更改附加到文本变量的模式,这会更好。换句话说,显示与第一种方法产生相同输出的代码,而不是完全不同的东西。您所需要做的就是将其保持为text+=stext+i+;这将有助于它专注于+=,这是OP的信念,关于他的困惑到底是什么@Makyen这个问题因循环而变得复杂。在第一次迭代中,text+=数字为+i和text=text+i都按预期执行,当循环继续时,输出不同。我添加了第三种方法来说明这一点。问题是,您的第三种方法不会产生与第一种方法相同的结果。您已将输出更改为指定给的结果文本。innerHTML=text;以显示输出a

s连续的console.log调用。虽然console.log调用可以说明发生了什么,但它们不是代码的重点。重点是让所有迭代的文本都在一个变量中,该变量显示在DOM中。第三种方法做了一些完全不同的事情,导致它没有很好地说明text+=和text=text+之间的无差异性。@Makyen-我删除了第三种方法。如果第三种方法没有改变附加到文本变量的模式,这会更好。换句话说,显示与第一种方法产生相同输出的代码,而不是完全不同的东西。您所需要做的就是将其保持为text+=stext+i+;这将有助于它专注于+=,这是OP的信念,关于他的困惑到底是什么@Makyen这个问题因循环而变得复杂。在第一次迭代中,text+=数字为+i和text=text+i都按预期执行,当循环继续时,输出不同。我添加了第三种方法来说明这一点。问题是,您的第三种方法不会产生与第一种方法相同的结果。您已将输出更改为指定给的结果文本。innerHTML=text;将输出显示为连续的console.log调用。虽然console.log调用可以说明发生了什么,但它们不是代码的重点。重点是让所有迭代的文本都在一个变量中,该变量显示在DOM中。第三种方法做了一些完全不同的事情,导致它没有很好地说明text+=和text=text+之间的无差异。@Makyen-我删除了第三种方法。看看这是怎么回事……唯一的区别是字符串现在是一个变量,它不同了,因为用另一个字符串添加一个空字符串总是生成另一个字符串。。如果你把一个非空字符串和一个非空字符串相加,它将产生一个与这两个字符串完全不同的字符串。你知道5+5等于10。如果您将操作循环两次,您将得到5+5+5,即15。同样,你也可以得到7+3,也就是10,但是一旦你开始循环它,你就会得到7+3+3,也就是13。@GullyBoy,也许这会有助于将字符串常量等同于单个字母。您正在尝试确定使用text+=和text=text+之间的区别,但是你在第1版中写的是text+=N+i+B,而在第2版中你使用了text=text+i+B而没有N。如果你想直接比较它们,你需要使用text=text+N+i+B来比较text+=N+i+B。这就是问题,为什么它不是……唯一的区别是字符串现在是一个变量,因为添加了空字符串和另一个字符串将始终生成另一个字符串。。如果你把一个非空字符串和一个非空字符串相加,它将产生一个与这两个字符串完全不同的字符串。你知道5+5等于10。如果您将操作循环两次,您将得到5+5+5,即15。同样,你也可以得到7+3,也就是10,但是一旦你开始循环它,你就会得到7+3+3,也就是13。@GullyBoy,也许这会有助于将字符串常量等同于单个字母。您正在尝试确定使用text+=和text=text+之间的区别,但是您在版本1中编写的是text+=N+i+B,而在版本2中使用的是text=text+i+B,没有N。如果要直接比较它们,您需要使用text=text+N+i+B与text+=N+i+B进行比较。