Javascript 我很困惑为什么会这样?编号(i)和#x2B;数目(1);

Javascript 我很困惑为什么会这样?编号(i)和#x2B;数目(1);,javascript,Javascript,我对字符串和数字加法感到非常困惑,正如您在这段代码中看到的,我不能添加“I” “1”作为一个数字,比如每当我尝试执行“document.getElementById(“demo”).innerHTML=text+=”“+I+1;”我得到答案11,顺便说一句,“I”的值是1。我已经找到了一个解决办法,但问题是我也是一个数字,当然,这就是为什么我必须遵循一些奇怪的模式。有关更多信息,请阅读以下代码: function myFunction() { var text = &

我对字符串和数字加法感到非常困惑,正如您在这段代码中看到的,我不能添加“I” “1”作为一个数字,比如每当我尝试执行“document.getElementById(“demo”).innerHTML=text+=”
“+I+1;”我得到答案11,顺便说一句,“I”的值是1。我已经找到了一个解决办法,但问题是我也是一个数字,当然,这就是为什么我必须遵循一些奇怪的模式。有关更多信息,请阅读以下代码:

      function myFunction() {
        var text = "";
        var i;

        Loop1:
        for (i = 0; i < 10; i++) {
            document.getElementById("demo").innerHTML = text += "<br>" + i + 1;
        }
          }
函数myFunction(){
var text=“”;
var i;
循环1:
对于(i=0;i<10;i++){
document.getElementById(“demo”).innerHTML=text+=“
”+i+1; } }
我不能这样写,因为计算机会把它写成字符串。因此,我找到的解决方案如下所示:

函数myFunction(){
var text=“”;
var i;
对于(i=0;i<10;i++){
document.getElementById(“demo”).innerHTML=text+=“
”+编号(i+1); } }

在您的第一个代码中,添加i的顺序将使其首先添加到字符串中,从而将其转换为字符串


”+i
+1

当您使用Number()对其进行包装时,它将不再转换为字符串,因为它现在包装在函数调用中

所以基本上
“string”+2
会将其转换为字符串,然后添加到字符串中

第二个解决方案基本上是
document.getElementById(“demo”).innerHTML=text++=“
”+(i+1)

现在将首先计算
i+1
,因为它由于分组运算符而具有更高的优先级(结果将是数字
2
),然后计算

”+2


顺便说一句,在循环的每次迭代中都不需要覆盖元素的内容。只需构建字符串并在循环后更新内容:

function myFunction() {
  var text = "";
  var i;

  for (i = 0; i < 10; i++) {
   text += "<br>" + (i + 1);
  }
  
  document.getElementById("demo").innerHTML = text;
}
函数myFunction(){
var text=“”;
var i;
对于(i=0;i<10;i++){
text+=“
”+(i+1); } document.getElementById(“demo”).innerHTML=text; }
从左到右添加操作

例如:
'+1+2
将是
“12”
,因为1将首先添加到空字符串,然后2将添加到字符串
“1”
。 第一步-
“”+1=“1”
,第二步-
“1”+2=“12”

但是如果你把
“+(1+2)
括在括号中,它会像在数学中一样优先。 第一步-
(1+2)=3
,第二步-
3+“”=“3”


在您的情况下,
Number()
可以做到这一点。

无法将数字添加到字符串中的原因是,它只会将数字添加到字符串中,而不会真正将它们添加到一起

这里有一个例子

number1=“1”;
数字2=2;
编号=编号1+编号2;
控制台日志(编号);
document.getElementById(“演示”).innerHTML=text+=“
”+i+1
如果你看,你会发现你在说,“文本”+1+1。这是JavaScript作为动态语言的一个奇怪之处。当解释器到达目的地时,它正试图理解您试图做的事情:

  • Aneeq是否希望有:
    text
    11
  • Aneez想要:
    text
    2

因此,当您在第二个代码片段上时,您明确地说: 好的,我希望你:

  • 获取文本
  • 将“
    ”字符串连接到
    文本
  • 将索引i转换为一个数字,并将这两个数字相加
  • 最后,将总和添加到上一个字符串中

  • text+=”
    “+(i+1)使用ParenthSis,当前所有内容都转换为字符串。操作顺序,从左到右
    (字符串+1)+1
    I,因为上下文不同。因为您是以字符串开头的,所以代码的计算结果是字符串,所以“+”用作连接符,而不是运算符。你可以在作业中添加内容,也可以在其周围添加括号。这是否回答了你的问题?既然这样,为什么不为(i=1;i)编写
    
    
    ("<br>" + i) + 1
    
    "<br>" + (i + 1)
    
    function myFunction() {
      var text = "";
      var i;
    
      for (i = 0; i < 10; i++) {
       text += "<br>" + (i + 1);
      }
      
      document.getElementById("demo").innerHTML = text;
    }