数据类型的检测,可以用typeof、instanceof、constructor、toString()。
typeof
typeof对于基本数据类型判断是没有问题的,但是遇到引用数据类型(如:Array)是不起作用的
// 1.typeof
console.log(typeof ""); //string
console.log(typeof 1); //number
console.log(typeof true); //boolean
console.log(typeof null); //object
console.log(typeof undefined); //undefined
console.log(typeof []); //object
console.log(typeof function(){}); //function
console.log(typeof {}); //object
instanceof
instanceof运算符,用来判断一个构造函数的prototype属性指向的对象是否存在另外一个要检测对象的原型链上。
// 2.instanceof
console.log("1" instanceof String); //false
console.log(1 instanceof Number); //false
console.log(true instanceof Boolean); //false
console.log([] instanceof Array); //true
console.log(function(){} instanceof Function); //true
console.log({} instanceof Object); //true
// console.log(null instanceof null);//报错
// console.log(undefined instanceof undefined);//报错
null和undefined会报错。
constructor
constructor 原型对象的一个默认属性存在,表示创建实例的构造函数的引用。
// 3.constructor
console.log(("1").constructor === String); //true
console.log((1).constructor === Number); //true
console.log((true).constructor === Boolean); //true
//console.log((null).constructor === Null);
//console.log((undefined).constructor === Undefined);
console.log(([]).constructor === Array); //
console.log((function() {}).constructor === Function); //true
console.log(({}).constructor === Object); //true
Object.prototype.toString()
// 4.Object.prototype.toString()
var a = Object.prototype.toString;
console.log(a.call("aaa")); //[object String]
console.log(a.call(1)); //[object Number]
console.log(a.call(true)); //[object Boolean]
console.log(a.call(null)); //[object Null]
console.log(a.call(undefined)); //[object Undefined]
console.log(a.call([])); //[object Array]
console.log(a.call(function() {})); //[object Function]
console.log(a.call({})); //[object Object]