1,typeof
typeof 返回的数据类型有
- undefined
- boolean (true,false)
- string
- symbol
- number
- function
- object
注意 typeof 无法精准判断 对象(Object) 数组(Array) null(空指针) ,用typeof 判断 返回的都是object
- 需要精准判断是不是 Array 时 使用 Array.isArray() 或者 instanceof
- 判断数据是 是不是 object类型
function isObject(val) {
return typeof val === 'object' && val !== null
}
function isArray(val) {
return Array.isArray(val)
}
function isObject(val){
return val instanceof Object
}
function isArray(val){
return val instanceof Array
}
2,constructor
undefinend,和null 没有constructor方法,不能调用会报错
let fn1 = function () {
return "456"
}
console.log(fn1.constructor==Function)
let obj = { }
console.log(obj.constructor === Object)
let a = 1
console.log(a.constructor === Number)
let str = "122333"
console.log(str.constructor === String)
let arr = [1, 2, 3, 4]
console.log(arr.constructor === Array)
let b1 = true
console.log(b1.constructor === Boolean)
3,instanceof
instanceof 只能用来判断只能用来判断 引用数据类型 对象和数组,不能用来判断 string boolean number
let obj = {}
console.log(obj instanceof Object)
let arr = [1, 2, 3, 4]
console.log(arr instanceof Array)
4,Object.prototype.toString.call(val)
object.prototype.toString.call() 用于精准的判断数据类型,不能判断null和undefined
function isType(val, type) {
return Object.prototype.toString.call(val) == `[object ${type}]`
}
console.log(isType(0, 'Number'))
console.log(isType("aa0", 'String'))
console.log(isType(true, 'Boolean'))
console.log(isType([], 'Array'))
console.log(isType({ }, 'Object'))
console.log(isType(function(){}, 'Function'))