1.用typeof判断数据类型
(1)注意点:typeof对于new构造出来的或是object和array都是返回一个object。
(2)用法:
console.log(typeof 1)//输出number
console.log(typeof '1')//输出string
console.log(typeof true)//输出boolean
console.log(typeof null)//输出object
console.log(typeof NaN)//输出number
console.log(typeof undefined)//输出undefined
console.log(typeof {})//输出object
console.log(typeof [])//输出object
console.log(typeof new Date())//输出object
console.log(typeof Symbol())//输出symbol
if ((typeof 1) == 'number') {
console.log(true)
} else {
console.log(false)
}//输出true
if ((typeof null) == 'number') {
console.log(true)
} else {
console.log(false)
}//输出true
2.用instanceof方法判断数据类型: instanceof 用来判断对象是否为某一数据类型的实例
注意点:不能判断null、undefined、number、string和Boolean类型
用法:
console.log(1 instanceof Number)//输出为false ,
console.log(new Number(1) instanceof Number)//输出true
//因为instanceof 用来判断对象是否为某一数据类型的实例
//且不能判断null、undefined
console.log(true instanceof Boolean)//输出false
console.log("1" instanceof String)//输出false
// console.log(null instanceof Null)//报错
// console.log(undefined instanceof undefined)//报错
//*判断对象是否为某一数据实例
console.log(new Date() instanceof Date)//输出true
console.log(new RegExp() instanceof RegExp)//输出true
手动实现instanceof方法:
function instance_Of(target, resource) {
let r = resource.prototype
let t = target.__proto__
while(true) {
if (t === null) return false
if (r === t) return true
t = t.__proto__
}
}
console.log(instance_Of(new Map(),Map))//输出true
console.log(instance_Of(new String('1'),String))//输出true
console.log(instance_Of(new Number(1),String))//输出false
3.用Object.prototype.toString方法判断数据类型
特点:最稳定的判断方法
运用:
console.log(Object.prototype.toString.call(1))//输出[object Number]
console.log(Object.prototype.toString.call("1"))//输出[object String]
console.log(Object.prototype.toString.call(true))//输出[object Boolean]
console.log(Object.prototype.toString.call(null))//输出[object Null]
console.log(Object.prototype.toString.call(undefined))//输出[object Undefined]
console.log(Object.prototype.toString.call(Symbol))//输出[object Function]
console.log(Object.prototype.toString.call(function(){}))//输出[object Function]
console.log(Object.prototype.toString.call({}))//输出[object Object]
console.log(Object.prototype.toString.call([]))//输出[object Array]
console.log(Object.prototype.toString.call(new Date()))//输出[object Date]
console.log(Object.prototype.toString.call(new Set()))//输出[object Set]
4.用constructor方法判断数据类型
特点:不能判断null和undefined
运用:
console.log((1).constructor)//输出ƒ Number() { [native code] }
console.log((1).constructor === Number)//输出true
console.log(true.constructor)//输出ƒ Boolean() { [native code] }
console.log(true.constructor === Boolean)//输出true
console.log(Symbol().constructor === Symbol)//输出true
console.log({}.constructor === Object)//输出true
console.log([].constructor === Array)//输出true
console.log(new Map().constructor === Map)//输出true
// console.log(null.constructor === null)//报错,因为没有null的属性
// console.log(undefined.constructor === undefined)//报错,因为没有undefined的属性