技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

【实例比较】JS检查变量是否数组的2种方法

作者:admin    时间:2022-5-31 18:59:53    浏览:

本文将通过具体实例,介绍JS检查变量是否数组的2种常用方法。

1、使用Object.prototype.toString.call()

Object.prototype.toString.call() 是一种判断 javascript 对象类型的标准化方法,因为我们知道 Object.prototype.toStringNumber.prototype.toStringFunction.prototype.toStringString.prototype.toStringArray.prototype.toString 都是不同的东西,因此使用Object.prototype.toString.call(obj)方式可以很好的区分各种类型:

console.log(Object.prototype.toString.call("jerry"));
//输出:[object String]

console.log(Object.prototype.toString.call(12));
//输出:[object Number]

console.log(Object.prototype.toString.call(true));
//输出:[object Boolean]

console.log(Object.prototype.toString.call(undefined));
//输出:[object Undefined]

console.log(Object.prototype.toString.call(null));
//输出:[object Null]

console.log(Object.prototype.toString.call({name: "jerry"}));
//输出:[object Object]

console.log(Object.prototype.toString.call(function(){}));
//输出:[object Function]

console.log(Object.prototype.toString.call([]));
//输出:[object Array]

console.log(Object.prototype.toString.call(new Date));
//输出:[object Date]

console.log(Object.prototype.toString.call(/\d/));
//输出:[object RegExp]

function Person(){};
console.log(Object.prototype.toString.call(new Person));
//输出:[object Object]

知道了这个,我们就能使用Object.prototype.toString.call()检查变量是否数组,我们看看下面的实例。

//判断: [object Array] 是否等于 [object Array]  
//输出: true  
console.log(Object.prototype.toString.call([]) === '[object Array]');  
  
//判断: [object Array] 是否等于 [object Array]  
//output: true  
console.log(Object.prototype.toString.call(new Array()) === '[object Array]');  
  
//判断: [object Object] 是否不等于 [object Array]  
// output: false  
console.log(Object.prototype.toString.call({}) === '[object Array]');   
  
//判断: [object Number] 是否不等于 [object Array]  
//output: false  
console.log(Object.prototype.toString.call(123) === '[object Array]');   
  
//判断: [object Boolean] 是否不等于 [object Array]  
//output: false  
console.log(Object.prototype.toString.call(true) === '[object Array]');   
  
//判断: [object String] 是否不等于 [object Array]  
//output: false  
console.log(Object.prototype.toString.call('javascript') === '[object Array]');   
  
//判断: [object Null] 是否不等于 [object Array]  
//output: false  
console.log(Object.prototype.toString.call(null) === '[object Array]');   
  
//判断: [object Undefined] 是否不等于 [object Array]  
//output: false  
console.log(Object.prototype.toString.call(undefined) === '[object Array]');  
  
//判断: [object Number] 是否不等于 [object Array]  
//output: false  
console.log(Object.prototype.toString.call(NaN) === '[object Array]');    

 为什么不直接使用obj.toString()呢?

我们看看下面几个例子:

console.log("jerry".toString());
//输出:jerry

console.log((1).toString());
//输出:1

console.log([1,2].toString());
//输出:1,2

console.log(new Date().toString());
//输出:Wed Dec 21 2016 20:35:48 GMT+0800 (中国标准时间)

console.log(function(){}.toString());
//输出:function (){}

console.log(null.toString());
//输出:error

console.log(undefined.toString());
//输出:error

同样是检测对象obj调用toString方法,obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样,这是为什么?

这是因为toStringObject的原型方法,而Arrayfunction等类型作为Object的实例,都重写了toString方法。不同的对象类型调用toString方法时,根据原型链的知识,调用的是对应的重写之后的toString方法(function类型返回内容为函数体的字符串,Array类型返回元素组成的字符串.....),而不会去调用Object上原型toString方法(返回对象的具体类型),所以采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型;因此,在想要得到对象的具体类型时,应该调用Object上原型toString方法。

2、使用Array.isArray()

Array.isArray()是JS检查变量是否数组的另一种方法。我们看看如下实例:

//输出:true  
console.log(Array.isArray([]));  
  
//输出:true  
console.log(Array.isArray(new Array()));  
  
//输出: false  
console.log(Array.isArray({}));   
  
//输出: false  
console.log(Array.isArray(123));   
  
//输出: false  
console.log(Array.isArray(true)) ;   
  
//输出: false  
console.log(Array.isArray('javascript'));   
  
//输出: false  
console.log(Array.isArray(null));   
  
//输出: false  
console.log(Array.isArray(undefined)) ;  
  
//输出: false  
console.log(Array.isArray(NaN)) ;  

我们可以使用下面的另一个代码示例快速检查变量是否数组。

function checkIfArray(array){  
      
    return (Array.isArray(array) === true && !array.length);  
}  
  
//输出:true  
console.log(Array.isArray([]));  
  
//输出:true  
console.log(checkIfArray(new Array()));  
  
//输出: false  
console.log(checkIfArray({}));   
  
//输出: false  
console.log(checkIfArray(123));   
  
//输出: false  
console.log(checkIfArray(true)) ;   
  
//输出: false  
console.log(checkIfArray('javascript'));   
  
//输出: false  
console.log(checkIfArray(null));   
  
//输出: false  
console.log(checkIfArray(undefined)) ;  
  
//输出: false  
console.log(checkIfArray(NaN)) ;  

并不是所有浏览器都支持 Array isArray(),支持 Array isArray() 的浏览器有:

  • Google Chrome 5.0
  • Microsoft Edge 12
  • Mozilla Firefox 4.0
  • Safari 5.0
  • Opera 10.5

为什么使用 Array.isArray() 方法来检查数组?

ECMAScript 5 (ES5) 引入了 Array.isArray() 方法来检查数组,因为 typeof 无法将数组与其他对象区分开来,例如内置对象 DateRegExp

使用 Array.isArray() 也有助于确保我们的对象不为null,因为由于长期存在的错误,null 具有“对象”类型。

总结

本文介绍了JS检查变量是否数组的2种常用方法,Object.prototype.toString.call()Array.isArray()在使用时,你可能需要注意浏览器是否支持的问题。

相关文章

标签: 变量  数组  
x
  • 站长推荐
/* 左侧显示文章内容目录 */