typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的
typeof运算符返回一个用来表示表达式的 数据类型 的字符串
let num = 1
let str = '小明'
let bolean = true
let arr = [1,2,3]
let obj = {
name: 'hello World'
}
console.log (typeof num); //number
console.log (typeof str); //string
console.log (typeof bolean); //boolean
console.log (typeof arr); //object
console.log (typeof obj); //object
console.log (typeof null); //object
console.log (typeof undefined); // undefined
我们可以使用 typeof 来获取一个变量是否存在
if(typeof a != undefined){ //如果变量没有声明 typeof a 为 undefined,并没有报错
}
if(a){ //如果变量没有声明代码会报错 a is not defined
}
并且通过以上例子可以看出数组和对象用typeof返回的竟然都是object?????
真相来了: 发现在使用 typeof 运算符时采用**引用类型**存储值会出现一个问题,无论引用的是什么类型的对象object,
这是typeof的局限性。
不过依然还是可以通过typeof判断某个变量是否为数组
let arr = [1,2,3]
console.log (typeof arr.length); //number 判断是number类型就可以区分是数组啦
instanceof 运算符用来测试一个判断一个对象是否为某一数据类型,或对象在其原型链中是否存在一个构造函数的 prototype 属性,返回的是一个布尔值。
instanceof 用于判断一个变量是否某个对象的实例,
function Fun (){ //声明一个构造函数
}
let a = new Fun() //构造函数的实例
console.log(a instanceof Fun); // 判断a是否是Fun的实例 结果:true