第一种方法 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
可以看出 typeof类型检查无法有效的检测有效的引用数据类型,如组数[]
instaceof
console.log("1" instanceof String); //false
console.log(1 instanceof Number);//false
console.log(true instanceof Boolean);//false
//console.log(null instanceof Null);false
//console.log(undefined instanceof Undefined);
console.log([] instanceof Array); //true
console.log(function(){} instanceof Function); //true
console.log({} instanceof Object); //true
大家看结果应该能明白 前三个为什么会输出 false?
可以看到前三个都是以对象字面量创建的基本数据类型,但是却不是所属类的实例,这个就有点怪了。后面三个是引用数据类型,可以得到正确的结果。为什么呢?
我们再改造一下
console.log(new String("1") instanceof String); //true
console.log(new Number(1) instanceof Number);//true
console.log(new Boolean(true) instanceof Boolean);//true
如果我们通过new关键字去创建基本数据类型,你会发现,这时就会输出true:
其实这是由于Javascript语言本身的特性造成的 ,具本原因,我在以后完善中给大家仔细说明
原型链校验 Object.property
function checkDataType(sourceData)
{
let checkProperty=Object.prototype.toString;
return checkProperty.call(sourceData);
}
有兴趣的小伙伴可以看看上面的代码 可以输出什么?不妨试试看
var a = Object.prototype.toString;
console.log(checkDataType("1")); //[object String]
console.log(checkDataType(1));//[object Number]
console.log(checkDataType(true));//[object Boolean]
console.log(checkDataType(null));//[object Null]
console.log(checkDataType(undefined));//[object Undefined]
console.log(checkDataType([]));//[object Array]
console.log(checkDataType(function() {}));//[object Function
]
console.log(checkDataType({}));//[object Object]
待续…