为什么此警报包含undefined?

时间:2017-05-08 16:37:23

标签: javascript jquery jstree

这是我的代码,它从jsTree复选框树列表中获取选项:

var level1, r = [];

for (i = 0, j = data.selected.length; i < j; i++) {
    r[0] = data.instance.get_node(data.selected[i]).text.trim();
    r[1] = data.instance.get_node(data.selected[i]).parents.length;

    if(r[1] == 1) {
       level1 += r[0] + ", ";
       alert(level1);
    }
}

上面的alert包含undefined以及复选框中的正确选项。知道为什么我在输出中未定义?

2 个答案:

答案 0 :(得分:1)

问题在于,当您第一次尝试在此处使用level1 += r[0]+", "; 时,level1 = level1 + r[0]+", "; 未定义:

level1

这与:

相同
undefined

问题是"undefined"未定义第一次迭代,因此文本包含var level1 = ""; 并连接它将#include <iostream> int main() { const int charSize = 256; char str[charSize]; scanf_s("%256s", str, charSize); printf("%s\n", str); } 连接为强制执行的字符串。将其初始化为空字符串:

<!DOCTYPE html>
  <html>
    <head>
      <meta charset="utf-8">
    </head>

    <body>
      <div id="root"></div>
        <h1>html</h1>
        <script src="script.js"></script>
        </body>
 </html>

这样,当你访问它时,它将不会被定义。

答案 1 :(得分:0)

:此

var level1, r = [];

for (i = 0, j = data.selected.length; i < j; i++) {
    r[0] = data.instance.get_node(data.selected[i]).text.trim();
    r[1] = data.instance.get_node(data.selected[i]).parents.length;

    if(r[1] == 1){
       level1 += r[0]+", ";
       alert(level1);
    }
}

应该是

var level1 = '';
   //Or leve1 = []; If you really need it as an array.
var r = [];

for (i = 0, j = data.selected.length; i < j; i++) {
    r[0] = data.instance.get_node(data.selected[i]).text.trim();
    r[1] = data.instance.get_node(data.selected[i]).parents.length;

    if(r[1] === 1){
       // level1[0] += r[0]+", "; If array.
       level1 += r[0]+", ";
       alert(level1);
      // alert(level1[0]); If array.
    }
}

level1未定义,level1, r = []生成r === []level1 === undefined

所以我建议你明确声明两个变量,如上面的代码块所示。

我还修复了比较运算符see here why