js判断对象类型1.typeof
typeof只能判断区分基本类型,number、string、boolean、undefined和object,function;typeof 0;  //number;
typeof true;  //boolean;
typeof undefined;  //undefined;
typeof "hello world"  //string;
typeof function(){};  //function;
typeof null; //object
typeof array
typeof {};  //object;
typeof []; //object
let s = Symbol();
typeof s    //"symbol"
s instanceof Symbol  //false
从上例我们可以看出, typeof  判断对象和数组都返回object,因此它⽆法区分对象和数组。
2.instanceof
var a={};
a instanceof Object  //true
a instanceof Array    //false
var b=[];
b instanceof Array  //true
b instanceof  Object //true
因为数组属于object中的⼀种,所以数组instanceof object,也是true.
var c='abc';
c instanceof String; //false
var d=new String();
d instanceof String  //true
instanceof不能区分基本类型string和boolean,除⾮是字符串对象和布尔对象。如上例所⽰。
var o={};
var arr=[];
可以看出constructor可以区分Array和Object。
var n=true;
var num=1;
var str='hello world';
var num=new Number();
不过要注意,constructor属性是可以被修改的,会导致检测出的结果不正确
function Person(){
}
function Student(){
}
Student.prototype = new Person();
var John = new Student();
console.structor==Student); // false
console.structor==Person); // true
除了undefined和null,其他类型的变量均能使⽤constructor判断出类型.
4.String.call()  ---------最好⽤String.call(123)
//"[object Number]"
String.call('str')
//"[object String]"
String.call(true)
//"[object Boolean]"
String.call({})
//"[object Object]"
String.call([])
//"[object Array]"
String.call(null)
//"[object Null]"
封装⼀个判断数组和对象的⽅法
function typeObj(obj){
var type=String.call(obj);
if(type=='[object Array]'){
return 'Array';
}elseif(type=='[object  Object]'){
return 'Object';
}else{
return "obj is not object or array"
}
}
String⽅法的在被调⽤的时候,会执⾏如下的操作步骤:
1. 获取对象的类名(对象类型)。
[[Class]]是⼀个内部属性,所有的对象(原⽣对象和宿主对象)都拥有该属性.在规范中,[[Class]]是这么定义的: 内部属性,[[Class]] ⼀个字符串值,表明了该对象的类型。
2. 然后将[object  获取的对象类型的名]组合为字符串
3. 返回字符串 “[object Array]” 。
5.jQuery中的  $.type接⼝
$.type(obj) ;
$.isArray(obj);
$.isFunction(obj);
$.isPlainObject(obj);
$.type(null) //null
$.type([])    //array
$.isArray([]); //true
$.isFunction(function(){}); //true
$.isPlainObject({}); //true
$.isPlainObject([]); //false
$.isPlainObject(null); //false

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。