JS判断是否为数组的6种方式


本文摘自PHP中文网,作者青灯夜游,侵删。

相关推荐:《javascript视频教程》

一、Array.isArray判断

用法:Array.isArray(arr)

ES5中新增了Array.isArray方法,IE8及以下不支持

Array.isArray() 用于确定传递的值是否是一个[Array], 返回布尔值 true;否则它返回 false。

1

2

let arr = [];

console.log(Array.isArray(arr)); // true

1

2

3

4

5

6

7

// 下面的函数调用都返回 true

Array.isArray([]);

Array.isArray([1]);

Array.isArray(new Array());

Array.isArray(new Array('a', 'b', 'c', 'd'))

// 鲜为人知的事实:其实 Array.prototype 也是一个数组。

Array.isArray(Array.prototype);

二、constructor判断

用法:arr.constructor === Array

Object的每个实例都有构造函数 constructor,用于保存着用于创建当前对象的函数

1

2

let arr = [];

console.log(arr.constructor === Array); // true

三、instanceof 判断

用法:arr instanceof Array

instanceof 主要是用来判断某个实例是否属于某个对象

1

2

let arr = [];

console.log(arr instanceof Array); // true

注:instanceof操作符的问题在于,它假定只有一个全局环境。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。(红宝书88页上的原话)

四、原型链上的isPrototypeOf判断

用法:Array.prototype.isPrototypeOf(arr)

Array.prototype 属性表示 Array 构造函数的原型

isPrototypeOf()可以用于测试一个对象是否存在于另一个对象的原型链上。

1

2

let arr = [];

console.log(Array.prototype.isPrototypeOf(arr)); // true

五、Object.prototype.toString

用法:Object.prototype.toString.call(arr) === '[object Array]'

Array继承自Object,JavaScript在Array.prototype上重写了toString,toString.call(arr)实际上是通过原型链调用了。

1

2

let arr = [];

console.log(Object.prototype.toString.call(arr) === '[object Array]'); // true

六、Array 原型链上的 isPrototypeOf

用法:Array.prototype.isPrototypeOf(arr)

Array.prototype 属性表示 Array 构造函数的原型

1

2

let arr = [];

console.log(Array.prototype.isPrototypeOf(arr)); // true

顺便复习一下typeof的用法:

对于引用类型,不能用typeof来判断,因为返回的都是object

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

// 基本类型

typeof 123;  //number

typeof "abc"; //string

typeof true; //boolean

typeof undefined; //undefined

typeof null; //object

var s = Symbol;

typeof s; //symbol

 

// 引用类型

typeof [1,2,3]; //object

typeof {}; //object

typeof function(){}; //function

typeof  Array; //function  Array类型的构造函数

typeof Object; //function  Object类型的构造函数

typeof Symbol; //function  Symbol类型的构造函数

typeof Number; //function  Number类型的构造函数

typeof String; //function  String类型的构造函数

typeof Boolean; //function  Boolean类型的构造函数

更多编程相关知识,请访问:编程学习!!

以上就是JS判断是否为数组的6种方式的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

javascript 中cookie读、写与删除操作(图文教程)

javascript用什么分割成数组

javascript原名是什么

es6块级绑定中let and const的详细分析

javascript和js之间有区别吗

资源合并与压缩的优化方法介绍

javascript中,nan是什么类型?

详解javascript中的作用域和作用域链

javascript中关于“this”的7个有趣面试题,你能全答对吗?

javascript和java一样吗?有什么区别?

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...