为什么此警报包含未定义?

Why does this alert contain undefined?

这是我的代码,它从 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 以及复选框中的正确选择。知道为什么我在输出中得到 undefined 吗?

问题是 level1 在您首次尝试在此处使用时未定义:

level1 += r[0]+", ";

这等同于:

level1 = level1 + r[0]+", ";

问题是 level1 未定义第一次迭代,因此文本包含 undefined 并连接它时将 "undefined" 连接为一个字符串,因为它是强制的。将其初始化为空字符串:

var level1 = "";

这样访问时就不会未定义了。

这个

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