js判断数据类型

120 阅读1分钟

数据类型有7种 number、string、boolean、null、undefined、object、symbol

1、typeof()

返回数据类型有着7种:number、string、boolean、function、undefined、object、symbol typeof(null) === "object";
引用类型除了function返回function之外,其它均是返回object;
其中null有自己的数据类型null,引用类型种的数组、日期、正则、也都有属于自己的类型,而typeof对于这些类型的处理,只返回其原型链最顶端的object类型,这不能满足我们的要求

typeof(NaN)==='number' 返回值是true,它是Number中的特殊数值
判断是否是NaN,用isNaN()
NaN == NaN 返回值是false
isNaN(NaN) 返回值是true

2、toString() 这个是最常用和全面的,推荐

toString()是Object的原型方法,Object.prototype.toString.call(值),返回[object xxx]格式的数据类型,其中xxx是真正的数据类型

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(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window 是全局对象 global 的引用

3、constructor

null和undefined没有constructor;
如果重写了prototype之后,constructor会丢失,因此在重写对象圆形的时候,要重新给constructor赋值;

"".constructor === String; // true
3.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

4、instanceof

用来判断一个构造函数的prototype属性所指向的对象,是否在另外一个要检测对象的原型链上 [] instanceof Array 返回true