我发现在developer.mozilla网站上显示的许多方法都有一个不重要的判断。
网址:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
您可以转发到" Polyfill"部分。
总是存在如下代码的判断:
Array.prototype.filter = function(fun /*, thisArg */)
{
"use strict";
if (this === void 0 || this === null)
throw new TypeError();
...
}
不仅有filter方法,还有Array.prototype.every(),Array.prototype.map()。
如:
Array.prototype.map = function (fun /*, thisp */) {
if (this === void 0 || this === null) { throw TypeError();
...
}
我不知道在哪种情况下条件的结果将返回true然后抛出一个" TypeError"。
在我看来,这个判断不是必不可少的,应该删除。
你怎么看?
这个判断是为了什么?
答案 0 :(得分:1)
this
指的是数组本身。
void 0
返回undefined
并且无法覆盖(undefined
可以 - 在ES5之前)。
该检查用于确定原型方法是否用于实际存在的事物,即未定义或无效。
如果您查看MDN's最新的polyfill,他们只需使用:
if (this == null) {
throw new TypeError(" this is null or not defined");
}
因为null == undefined
是true
。
答案 1 :(得分:1)
我不知道在哪种情况下条件的结果会返回 如果为true,则抛出" TypeError"。
答案:
Array.prototype.filter = function(fun /*, thisArg */){
console.log('okay',this==null);
}
Array.prototype.filter.call(null);
Array.prototype.filter.call(undefined);