这段JS代码为啥会出错?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这段JS代码为啥会出错?相关的知识,希望对你有一定的参考价值。

var d1=document.getElementById('mm1').getElementsByTagName('li');
var d2=document.getElementById('mm2').getElementsByTagName('li');
var d = d1.concat(d2);

提示:d1.concat is not a function
concat 不是合并数组的吗?在同一文档中用过这个合并,没有报错啊,为什么第二处用就错,晕死了!!!
谢谢anywing2000的提醒,如果要合并的话该怎么写呢?

document.getElementById('mm1').getElementsByTagName('li')这个得到的是一个DOM对象集合,是一个objNodeList。没有concat这个方法。

既然NodeList有length,可以for循环索引取值,转换成数组就很简单了。最直接的思路是这样的:
var arr = new Array();
var anchors = document.getElementsByTagName("a")
for (var i = 0; i < anchors.length; i++)
var ele = anchors[i];
arr.push(ele); //arr就是我们要的数组

先new一个Array,遍历NodeList,然后将每一个单独的元素push到数组变量里,最后操作数组变量。就是用你说的concat方法。可以参见http://www.web2bar.cn/Article/5139.aspx。
参考技术A 改好了,form应该用name属性不是id,还有setTimeout里面应该是disptime不是distime <html> <head runat="server"> <title>SetTimeout方法</title> <script

为啥这段代码会进入无限循环? [复制]

【中文标题】为啥这段代码会进入无限循环? [复制]【英文标题】:Why does this code goes into infinite loop? [duplicate]为什么这段代码会进入无限循环? [复制] 【发布时间】:2014-02-13 07:37:12 【问题描述】:

考虑以下代码:

public class Game 

    public static void main(String[] args) 

        int x = 0;
        while (x < 1) 
          x = x++;
        

    


使用我的编译器,这段代码会进入无限循环,但为什么呢?

首先,我们将 x 的值放入 x ,然后 only 然后我们将 1 添加到 x ,然后我预计 1 &lt; 1 将是 false ,并且while 循环将终止 ...

但是不,这不会发生。

那么无限循环的原因可能是什么?

【问题讨论】:

对于调试器来说听起来像是一个很好的问题。一步一步通过它。或者在里面放一些日志语句。 x=x++; 保持 x 不变 - 你增加它,然后用旧值(增加之前的值)替换它。 -1 不签出“相关”(第二个问题包含答案) 特别是当你说“首先,我们将 x 的值放入 x 中,然后才将 x 加 1”时,你似乎感到困惑。确实,从词法上讲,赋值在增量之前,但是赋值右侧的值必须在赋值发生之前计算出来。 (该值是 x 的 old 值,因为增量是 post-increment)。 【参考方案1】:

表达式x++ 是一个后增量,这意味着表达式的值是旧值0,然后将其分配回x,因此x 始终是0x = x++;之后。

要跳出无限循环,不要将其分配回x,保持x1的后增量值不变:

while (x < 1) 
   x++;

【讨论】:

【参考方案2】:

x++ 几乎等同于

some-temporary = x;
x = x + 1;
now use the value of some-temporary

所以x = x++; 等价于

some-temporary = x;
x = x + 1;
x = some-temporary;

所以你应该可以看到为什么加1的部分没有效果。

【讨论】:

【参考方案3】:

这是因为x 在被使用后会增加。因此,发生的扩展操作序列将是:

    oldX = x x++,即x = x + 1 x = oldX

oldX 是一个虚构的变量。

发生的情况是x 总是被分配oldX,在我们的例子中是0,导致无限循环。 x++ 部分将被忽略。

解决方案:将x = x++ 替换为x++,或者,如果您真的 需要,x = ++x

【讨论】:

【参考方案4】:

x = x++ 不会做你想做的事。将其替换为x++

x++ 等同于x = x + 1,所以你的分配没有意义。

可以在此处的答案中找到有关此问题的更多信息:

Why does this go into an infinite loop?

【讨论】:

我就是这个意思:x = x++; @ron 与 t = x + 1 相同; x = x; 不,@ron,你的意思是x = x + 1;,但是你选择写它。

以上是关于这段JS代码为啥会出错?的主要内容,如果未能解决你的问题,请参考以下文章

为啥尝试写入大文件会导致js堆内存不足

为啥这段js代码设置断点单步调试能够走通,得到结果;但取消断点直接运行就不行了?

js问题,动态增加select里的option,求问为啥这段代码不执行?求大神指教!

在Chrome上面按F12修改页面的源代码里面的JS代码为啥无法生效

为啥js代码在HTML文件里可以运行,写在js文件里被html文件调用之后却是无法运行了?

为啥我在 node.js 中使用 sendFile() 方法为两个路由提供静态文件时会出错