天天看点

js判断数据类型判断数据类型

判断数据类型

隐式转换

0,’’,NaN,false,null,undefined,会转化为false
if (undefined == true) {
    console.log('true');
} else {
    console.log('false');
}
//结果输出false           

复制

var str = 'abc'
var num = 1
var bool = true
var arr = [1, 2, 3]
var obj = { name: 'haoxl', age: 18 }
var fun = function () { console.log('I am a function') }
var und = undefined
var nul = null
var str1 = new String(123)
var num1 = new Number(123)
var bool1 = new Boolean(true)
var arr1 = new Array([])
var obj1 = new Object({})
var fun1 = new Function('a', 'b')           

复制

typeof

typeof,返回的结果用该类型的字符串(全小写字母)形式

缺点:对象,数组,null,以及所以new的东西,都返回object

console.log(typeof str);    //string
console.log(typeof num);    //number
console.log(typeof bool);   //boolean
console.log(typeof arr);    //object
console.log(typeof obj);    //object
console.log(typeof fun);    //function
console.log(typeof und);    //undefined
console.log(typeof nul);    //object
console.log(typeof str1);   //object
console.log(typeof num1);   //object
console.log(typeof bool1);  //object
console.log(typeof arr1);   //object
console.log(typeof obj1);   //object
console.log(typeof fun1);   //function           

复制

instanceof

A instanceof B,A对象是不是B构造函数构造出来的。A对象的原型链上有没有B的原型。

instanceof不能区别undefined和null,

而且对于基本类型如果不是用new声明的则也测试不出来,

对于是使用new声明的类型,它还可以检测出多层继承关系。

console.log(str instanceof String, str instanceof Object);      // false,false
console.log(num instanceof Number, num instanceof Object);      // false,false
console.log(bool instanceof Boolean, bool instanceof Object);   // false,false
console.log(arr instanceof Array, arr instanceof Object);       // true,true
console.log(obj instanceof Object);                             // true
console.log(fun instanceof Function, fun instanceof Object);    // true,true
console.log(und instanceof Object);                             // false
console.log(nul instanceof Object);                             // false
console.log(str1 instanceof String, str1 instanceof Object);    // true,true
console.log(num1 instanceof Number, num1 instanceof Object);    // true,true
console.log(fun1 instanceof Function, fun1 instanceof Object);  // true,true
console.log(obj1 instanceof Object);                            // true           

复制

constructor

可以判断数组和对象,

缺点:undefined和null没有contructor属性

console.log(str.constructor === String, str.constructor === Object);        // true,false
console.log(num.constructor === Number, num.constructor === Object);        // true,false
console.log(bool.constructor === Boolean, bool.constructor === Object);     // true,false
console.log(arr.constructor === Array, arr.constructor === Object);         // true,false
console.log(obj.constructor === Object);                                    // true
console.log(fun.constructor === Function, fun.constructor === Object);      // true,false
console.log(str1.constructor === String, str1.constructor === Object);      // true,false
console.log(num1.constructor === Number, num1.constructor === Object);      // true,false
console.log(bool1.constructor === Boolean, bool1.constructor === Object);   // true,false
console.log(arr1.constructor === Array, arr1.constructor === Object);       // true,false
console.log(obj1.constructor === Object);                                   // true
console.log(fun1.constructor === Function, fun1.constructor === Object);    // true,false           

复制

Object.prototype.toString.call()

原理:toStirng方法返回一个变量(包含对象)的字符串表示方式。

toString方法是Objectde 原型方法,如果直接调用toString()方法,会先经过一个包装类的过程,然后调用包装类上面继承并重写过的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 (){}           

复制

验证:
var arr=[1,2,3];
console.log(Array.prototype.hasOwnProperty("toString"));//true
console.log(arr.toString());//1,2,3
delete Array.prototype.toString;//删除实例属性
console.log(Array.prototype.hasOwnProperty("toString"));//false
console.log(arr.toString());//"[object Array]"           

复制

console.log(Object.prototype.toString.call(str));   //[object String]
console.log(Object.prototype.toString.call(num));   //[object Number]
console.log(Object.prototype.toString.call(bool));  //[object Boolean]
console.log(Object.prototype.toString.call(arr));   //[object Array]
console.log(Object.prototype.toString.call(obj));   //[object Object]
console.log(Object.prototype.toString.call(fun));   //[object Function]
console.log(Object.prototype.toString.call(und));   //[object Undefined]
console.log(Object.prototype.toString.call(nul));   //[object Null]

//使用正则获取[object Function]里面的数据类型
var regstr = '[object Function]'
var res = regstr.match(/\s+(\w+)/)
console.log(res[1]);           

复制

本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!

本文分享自作者个人站点/博客

https://www.hsslive.cn

复制

如有侵权,请联系 [email protected] 删除。