问题遇到的现象和发生背景
写的代码是想把一段字符串中的字母,不重复地添加到一个新数组中,
使用indexOf(),是想判断某个字符是否已存在于新数组中。
问题相关代码
问题代码:
var str = 'abcoefoxyozzopp';
var arr = [];
var p;
for (var i = 0; i <= str.length; i++) {
p = str.charAt(i);
if (arr.indexOf(p) === -1) {
arr = arr.push(p);
}
}
运行结果及报错内容
我的解答思路和尝试过的方法
首先我根据报错内容尝试了用函数封装(虽然我也不知道为什么需要这样),并且改了一些命名:
function add(str) {
var arr = [];
var letter;
for (var i = 0; i < str.length; i++) {
letter = str.charAt(i);
if (arr.indexOf(letter) === -1) {
arr.push(letter);
}
}
return arr;
}
var str = add('abcoefoxyozzopp');
console.log(str);
结果成功了:
Array(10) [ "a", "b", "c", "o", "e", "f", "x", "y", "z", "p" ]
之后我又试了一下不封装函数,只改命名,也成功了。
var str = 'abcoefoxyozzopp';
var arr = [];
var letter;
for (var i = 0; i < str.length; i++) {
letter = str.charAt(i);
if (arr.indexOf(letter) === -1) {
arr.push(letter);
}
}
console.log(arr);
百思不得其解,最后我一 一对照,发现是第七行造成的差异。
arr = arr.push(letter);
//报错
arr.push(letter);
//不报错
我想问的就是,为什么第七行的差异会影响第六行;还有为什么报错内容会是“is not a function”。