一直以来只浏览各种技术博客却没有做一个记录,不总结总是会忘,然而基础又是技术人员的重中之重,像大楼的根基。篮球运动员每天都会训练来保持状态,乐队鼓手也是多少年如一日地根据节奏点练习,同样我们何尝不应该每天练习基础来夯实根基呢?
今天就先分享一下JS中检测数组的4种方法。
1. Array.isArray 方法
Array.isArray 用于检测一个值是否是数组,任何环境下都是可以的。但此方法在低版本IE浏览器中不被支持。
const arr = [6, 7, 8]
console.log(Array.isArray(arr)) // true
2. instanceof 方法
instanceof 用于检测一个对象是不是某个类的实例,数组也是一种对象所以可以使用 instanceof 来进行判断。
const arr = [6, 7, 8]
console.log(arr instanceof Array) // true
这种方法只有一个全局作用域的环境下是可以的,但如果一个网页中包含多个框架,就会存在不同的全局环境,不同的环境 Array 构造函数是不同的,所以要在两个框架下传递数组时就会出现问题,在某个框架里检测出来是数组但在另一个框架里检测出来不是数组。
3. 数组构造函数 constructor
创建数组时可以使用 var arr = new Array() 的形式,反过来我们也可以利用 constructor 属性来获取它的构造函数,根据其是不是Array来判断一个值是不是数组。
const arr = [6, 7, 8]
console.log(arr.constructor === Array) // true
此方法同第二种有一样的缺点,多个环境下 Array 构造函数有可能是不同的,而且在多个环境下如果要进行数组传递就很有可能出现问题。
4. Object.prototype.toString.call() 方法
我们知道,在任何值上调用 Object 原生的 toString 方法,都会返回 [object NativeContructorName] 格式的字符串,利用这一点也可以用来检测是不是数组。
const arr = [6, 7, 8]
console.log(Object.prototype.toString.call(arr) === '[object Array]') // true
由于原生数组的构造函数名与全局环境无关,因此无论在哪一个环境下这个方法都可以正确的检测一个数组。