JS中判断数据类型(判断数组 or 对象)

总结:判断对象是否为数组的方法

1、instanceof方法 (判断数组的prototype是否在该对象的原型链中)

  console.log([] instanceof Array);    //true

2、constructor方法 (判断该对象的构造函数是否是Array)

  console.log([].constructor === Array); // true

3、Array.isArray() (数组自带的判断方法)

  console.log(Array.isArray([])); // true

JavaScript中检测对象的方法

1.Object.prototype.toString (推荐!!!)

Object.prototype.toString的行为:首先,取得对象的一个内部属性,然后依据这个属性,返回一个类似于"[object Array]"的字符串作为结果. 利用这 个方法,再配合call,我们可以取得任何对象的内部属性,然后把类型检测转化为字符串比较,以达到我们的目的。

 const types = {
    get:(type)=>Object.prototype.toString.call(type),
    string:'[object String]',
    number:'[object Number]',
    boolean:'[object Boolean]',
    function:'[object Function]',
    array:'[object Array]',
    object:'[object Object]',
    null:'[object Null]',
    undefined:'[object Undefined]',
}


	var arr = [1,2,3,1];
	console.log( typs.get(arr) ===  types.array );        //true
	var obj = {};
	console.log( typs.get(obj) ===  types.object );        //true

2. instanceof操作符 (可用于检测是否是数组)

instanceof运算符用于检测构造函数的prototype属性是否出现在对象的原型链中的任何位置

	console.log([] instanceof Array);    //true
	console.log({} instanceof Array);    //false
	console.log({} instanceof Object);   //true
	console.log([] instanceof Object);   //true

3.对象的constructor属性 (可用于检测是否是[ ]和{ })

所有对象都会从它的原型上继承一个 constructor 属性:

console.log({}.constructor === Object); // true
console.log({}.constructor === Array);  //false
console.log([].constructor === Array); // true
console.log([].constructor === Object);  //false

4. typeof操作符 (判断Function、String、Number、Undefined,Boolean)

利用typeof判断类型, 可以判断Function、String、Number、Undefined,Boolean;

利用typeof判断为object,不一定就是 {},也有可能是 [ ], null;

	console.log(typeof 'abc');   //string
	console.log(typeof 98);      //number
	console.log(typeof age);     //undefined
	console.log(typeof true);     //bol
	console.log(typeof function(){});   //function
	console.log(typeof null);     //object
	console.log(typeof {});       //object
	console.log(typeof []);       //object

5.Array.isArray() (推荐)

检测一个值是否为数组。IE9+、 Firefox 4+、Safari 5+、Opera 10.5+和Chrome都实现了这个方法。但是在IE8之前的版本是不支持的

console.log(Array.isArray([]));                   //true


兼容浏览器写法
var arr = [1,2,3,1];
var arr2 = [{ abac : 1, abc : 2 }];
function isArrayFn(value){
  if (typeof Array.isArray === "function") {
     return Array.isArray(value);
  }else{
     return Object.prototype.toString.call(value) === "[object Array]";
  }
}
alert(isArrayFn(arr));// true
alert(isArrayFn(arr2));// true

参考链接 https://www.cnblogs.com/heshan1992/p/6927690.html

你可能感兴趣的:(javascript)