一、typeof运算符
console.log(typeof Symbol())
console.log(typeof '')
console.log(typeof 1)
console.log(typeof true)
console.log(typeof undefined)
console.log(typeof new Function())
console.log(typeof null)
console.log(typeof [1, 2, 3])
console.log(typeof new Date())
console.log(typeof new RegExp())
console.log(typeof {})
结果:
symbol
string
number
boolean
undefined
function
object
object
object
object
object
结果如上:typeof运算符在判断Symbol,String,Number,Boolean,undefined,Function等的时候会总结返回类型,但是null,Array,Date,RegExp,Object是都返回了object。
二、instanceof运算符
console.log(new Date() instanceof Date)
console.log(new RegExp() instanceof RegExp)
console.log([] instanceof Array)
console.log({} instanceof Object)
结果:
true
true
true
true
A instanceof B 用来判断A是否为B的实例,如果是则返回A,不是则返回false。这个运算符的本质是用来检测 B.prototype 是否存在于参数 A 的原型链上。
三、instanceof运算符
function getType(value) {
return Object.prototype.toString.call(value)
}
console.log(getType(Symbol()))
console.log(getType(''))
console.log(getType(1))
console.log(getType(true))
console.log(getType(undefined))
console.log(getType(new Function()))
console.log(getType(null))
console.log(getType([1, 2, 3]))
console.log(getType(new Date()))
console.log(getType(new RegExp()))
console.log(getType({}))
结果:
[object Symbol]
[object String]
[object Number]
[object Boolean]
[object Undefined]
[object Function]
[object Null]
[object Array]
[object Date]
[object RegExp]
[object Object]
Object.prototype.toString.call这个是最准确的方法。
上面的函数也可以改写一下:
function getType(value) {
return Object.prototype.toString.call(value).slice(8, -1)
}
结果:
Symbol
String
Number
Boolean
Undefined
Function
Null
Array
Date
RegExp
Object
这样就直接返回了类型的名称字符串。