JavaScript循环中无法将fs值赋值给new1变量的原因咨询
问题:循环赋值后new1[j]输出undefined的原因解析
先看你写的代码:
for (var j=0, new1=""; j<fs.length; j++) { new1[j] = fs[j]; console.log(new1[j]); console.log(fs[j]); } console.log(fs[j]) // is displaying the value contained in fs. console.log(new1[j]) // is displaying "undefined" only.
这里有两个核心问题导致了new1[j]输出undefined:
1. new1被错误初始化为字符串,而非数组
你把new1初始成了空字符串"",但JavaScript里的字符串是不可变类型,而且根本不支持通过索引下标直接修改或添加内容。你写的new1[j] = fs[j]这种赋值操作完全不会生效,new1自始至终都是空字符串。
当你尝试读取new1[j]时,空字符串的任何索引位置返回的都是undefined——不管是循环过程中还是循环结束后。
2. 循环结束后j的取值超出了有效范围
循环退出时,j的值等于fs.length(因为循环条件是j < fs.length,当j增长到等于fs.length时就会停止循环)。这时候:
- 你说
fs[j]能显示对应值,大概率fs不是标准数组,而是一个类数组对象,或者你手动给fs[fs.length]这个超出常规数组范围的位置赋值了,但这不是核心问题。 - 就算你把
new1改成数组new1 = [],循环结束后new1[j]也会是undefined,因为数组的有效索引最大到fs.length - 1,j等于fs.length时已经超出了数组的合法索引范围。
正确的写法参考
如果你想把fs的内容复制到new1里,应该把new1初始化为数组,再进行赋值:
// 方法1:用数组slice直接复制(适用于fs是数组的场景) var new1 = fs.slice(); // 方法2:循环赋值,先初始化new1为数组 var new1 = []; for (var j = 0; j < fs.length; j++) { new1[j] = fs[j]; console.log(new1[j]); console.log(fs[j]); } // 循环结束后如果要访问最后一个元素,要用j-1 console.log(fs[j-1]); console.log(new1[j-1]);
内容的提问来源于stack exchange,提问作者learningQA
相关产品推荐
相关产品推荐

