判断数据类型
隐式转换
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] 删除。