# js判断数据类型的四种方法

js判断数据类型的四种方法

1. typeof

typeof是一个操作符,其右侧跟一个表达式,并且返回这个表达式的数据类型,返回类型为:number,string,boolean,undefined,function,object,symbol

typeof "123";  //string
typeof 0;   //number
typeof true; //boolean
typeof undefined; //undefined
typeof function(){}; //function
typeof {}; //object
typeof Symbol(); //symbol
typeof null; //object
typeof []; //object
typeof new Date(); //object

2. instanceof

instanceof用来判断A是否为B的实例, 表达式为:表达式为:A instanceof B,如果A是B的实例,则返回true,否则返回false。instanceof检测的是原型,内部机制是通过判断对象的原型链中是否有类型的原型。

{} instanceof Object; //true
[] instanceof Array;  //true
[] instanceof Object; //true
"123" instanceof String; //false
new String(123) instanceof String; //true

3. constructor

当一个函数F被定义时,JS引擎会为F添加prototype原型,然后在prototype上添加一个constructor属性,并让其指向F的引用,F利用原型对象的constructor属性引用了自身,当F作为构造函数创建对象时,原型上的constructor属性被遗传到了新创建的对象上,从原型链角度讲,构造函数F就是新对象的类型。这样做的意义是,让对象诞生以后,就具有可追溯的数据类型。

''.constructor == String  //true  

new Number(1).constructor == Number  //true

true.constructor == Boolean  //true

new Function().constructor == Function  //true

new Date().constructor == Date  //true

new Error().constructor == Error  //true

[].constructor == Array  //true

document.constructor == HTMLDocument  //true

window.constructor == Window  //true

  1. Object.prototype.toString()

    toString()是Object的原型方法,调用该方法,默认返回当前对象的[[Class]]。这是一个内部属性,其格式为[object Xxx],其中Xxx就是对象的类型。

    对于Object对象,直接调用toString()就能返回[object Object],而对于其他对象,则需要通过call、apply来调用才能返回正确的类型信息。

Object.prototype.toString.call('') //'[object String]'

Object.prototype.toString.call(1)  //'[object Number]'

Object.prototype.toString.call(true)   //'[object Boolean]'

Object.prototype.toString.call(Symbol())  //'[object Symbol]'

Object.prototype.toString.call(undefined) //'[object Undefined]'

Object.prototype.toString.call({}) //'[object Object]'

Object.prototype.toString.call([]) //'[object Array]'

Object.prototype.toString.call(null)  //'[object Null]'

Object.prototype.toString.call(new Function()) //'[object Function]'

Object.prototype.toString.call(new Error())  //'[object Error]'

Object.prototype.toString.call(new Date()) //'[object Date]'

Object.prototype.toString.call(document) //'[object HTMLDocument]'

Object.prototype.toString.call(window) //'[object Window]'

上一篇:instanceof运算符的实质:Java继承链与JavaScript原型链


下一篇:二 、函数高级 (一)-- 原型与原型链