js 数组中的方法 [1,2,3].filter((v)=>v===2)

[1,2,3].filter((v)=>v===2) 直接这样写会报错

Uncaught TypeError: Cannot read property 'filter' of undefined

这是什么原因?

5个回答

Uncaught TypeError: Cannot read property 'filter' of undefined
这个错误说明 xxx.filter 前面的xxx的值是undefined。

应该是你[1,2,3].filter((v)=>v===2)代码的上一行代码结尾处没有写;分号。
导致第二行开始的[1,2,3]成了上一行结尾处对象的属性下标。

比如

var obj = {a:"asd"}
[1,2,3].filter((v)=>v===2)

{a:"asd"}后面没有写;分号,就会把这两行合起来执行。
var obj = {a:"asd"}[1,2,3].filter((v)=>v===2)
{a:"asd"}[1,2,3]就是访问{a:"asd"}对象的[3]属性,结果自然是 undefined

qq_40086260
qq_40086260 正解!!
4 个月之前 回复

没有报错,哈哈

<script>
    alert([1,2,3].filter((v)=>v===2));
</script>
guangcaiwudong
Kevin.Y.K 回复qq_40086260: 去掉了也没有任何问题
4 个月之前 回复
qq_40086260
qq_40086260 你把alert去掉
4 个月之前 回复

你用的什么浏览器?浏览器版本问题吗

(function(){

console.log( [1,2,3].filter(function(v){ return v === 2}) );
})(function(){
if (!Array.prototype.filter){
Array.prototype.filter = function(fun){

if (this === void 0 || this === null)
throw new TypeError();
var t = Object(this);
var len = t.length >>> 0;
if (typeof fun !== "function")
throw new TypeError();
var res = [];
var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
for (var i = 0; i < len; i++){
if (i in t)
{
var val = t[i];
if (fun.call(thisArg, val, i, t))
res.push(val);
}
}
return res;
};
}
});

这是es6的语法 你用的es5版本的js吧

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问