js中的typeof和instanceof的用法和区别(附类型判断方法)
原创
©著作权归作者所有:来自51CTO博客作者暮志未晚的原创作品,请联系作者获取转载授权,否则将追究法律责任
typeof
作用:用于判断一个一个表达式,(对象或者原始值),返回一个字符串。
返回的可能的值(摘自mdn)
类型
| 结果
|
Undefined
| "undefined" |
Null
| "object" (历史遗留问题) |
Boolean
| "boolean" |
Number
| "number" |
String
| "string" |
Symbol (ECMAScript 6 新增)
| "symbol" |
宿主对象(由JS环境提供)
| Implementation-dependent
|
函数对象 ( [[Call]] 在ECMA-262条款中实现了)
| "function" |
任何其他对象
| "object" |
instanceof
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
使用规则:
object instanceof constructor
要求前面是个对象,后面是一个构造函数。而且返回的是布尔型的,不是true就是false。
常用使用:
由于typeof只能判断类型,所以,数组和对象返回的都是object,这时就需要使用instanceof来判断是否是
[] instanceof Array //true
所以,我们可以通过这两种方式封装一个函数专门进行类型判断:
function getDataType(obj) {
if(obj === null){
return "null";
}else if(typeof obj === "object"){
if(obj instanceof Array){
return "array";
}else{
return "object";
}
}else{
return typeof obj;
}
}
以下是对每个类型的测试
console.log(getDataType(111)); //number
console.log(getDataType("fasd"));//string
console.log(getDataType(true));//boolean
console.log(getDataType(function () { }));//function
console.log(getDataType([]));//array
console.log(getDataType({}));//object
console.log(getDataType(null));//null
console.log(getDataType(undefined));//undefined
console.log(getDataType(/\n/));//object
var a;
console.log(getDataType(a));//undefined 如果传入没有声明的变量会直接报错