赞
踩
前言:判断数组的方法有很多,但是最完美的只有一个。
通过 toString.call 方法来判断是否数组。
- function isArray(obj) {
- return Object.prototype.toString.call(obj) === "[object Array]";
- }
缺点:ES6 提供了一个知名符号[Symbol.toStringTag],可以指定 toString.call 的调用行文,再用这种方法就不准确了。
- const obj = {
- [Symbol.toStringTag]: "abc",
- };
- Object.prototype.toString.call(obj); // [object abc]
通过 instanceof 判断原型链。
- function isArray(obj) {
- return obj instanceof Array;
- }
缺点:可以通过 Object.setPrototypeOf 改变原型链的指向。
- let obj = {};
- Object.setPrototypeOf(obj, Array.prototype);
- isArray({});
ES6 提供的最完美的判断数组方法,底层是 C++代码。无法随意篡改。
- function isArray(obj) {
- return Array.isArray(obj);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。