为什么控制台告诉我.filter不是函数?

时间:2016-06-13 02:13:05

标签: javascript

var str = "I am a string.";

console.log(str.split(''));

var fil = function(val){
return val !== "a";
};

console.log(str.filter(fil));

当我运行它时,它表示str.filter不是函数。

3 个答案:

答案 0 :(得分:20)

因为filter是一个数组函数(Array.prototype.filter),所以当你在一个字符串上调用它时。 str.split返回一个数组,不会更改str的任何内容。称之为console.log(str.split('').filter(fil)),它应该没问题。

答案 1 :(得分:5)

因为你在str上调用了“filter”的执行,str是一个没有自己称为“过滤器”的函数的对象,也不是原型。由于过滤器不存在,属性的值是未定义的,因为它的类型不是函数而无法调用。

答案 2 :(得分:2)

String对象没有filter方法,String是不可变的。 因此实际上str.split('')不会更改字符串的值,但会返回一个新的String,而您没有在变量中捕获它。

尝试,

console.log(str.split('').filter(fil));