出于好奇,我只想知道原因。
所有的数组方法,如map, forEach,reduce都写在上面Array.prototype,所以,我可以这样使用
let sum = [1,2,3,4,5].reduce( (acc, value) => acc+value, 0);
console.log(sum);Run Code Online (Sandbox Code Playgroud)
与所有这些方法不同,isArray()用法就像
let isArray = Array.isArray([1,2,3]); // I can't use [1,2,3].isArray(); :(
console.log(isArray);Run Code Online (Sandbox Code Playgroud)
这背后有什么原因吗?
为什么
isArray()是写上Array而不是Array prototype?
如果答案是“不,它不是数组”:
let obj = {};
let isArray = obj.isArray(); // TypeError: obj.isArray is not a functionRun Code Online (Sandbox Code Playgroud)
的目的isArray是提供一种检查可能是或不是数组的东西是否是数组的方法。如果isArray在 Array 原型上,除非答案是“是的,它是一个数组”,否则它将无法访问。
说句公道话,它会一直可能把isArray上Object.prototype,并使其返回false,然后覆盖它Array.prototype来回报true。但是,对于undefinedand仍然会失败null:
let x = null;
let isArray = x.isArray(); // TypeError: Cannot read property 'isArray' of nullRun Code Online (Sandbox Code Playgroud)
...并且会不必要地污染标准库中所有其他对象类型的成员列表。让它成为一个静态的,你用要测试的东西作为参数调用它更有意义——在Array.isArray添加的地方。(可能更有意义的事情仍然是typeof从根本上不同于它的工作方式,但那艘船于 1995 年航行,所以......)
| 归档时间: |
|
| 查看次数: |
609 次 |
| 最近记录: |