1. 确定数据的类型
typeof
因为ECMAScript 的类型系系统是松散的,所以需要一种手段来确定任意变量的数据类型。typeof 这个操作符就是为此而生的。
typeof 最适合用来判断一个变量 是否为原始类型。更确切地说,他是判断一个变量是否为"字符串"、"数值"、"布尔值"、"未定义的"的最好方式。
typeof 虽然对 原始值有作用,但他对 引用值的用处不大。
let a = "你好啊"; // string
let b = 123; // number
let c = function add() {
console.log("function"); } // function
let f = true; // boolean
let g = undefined; // undefined
let h = null; // object
let j = new Object() // object
console.log(typeof a); // string
console.log(typeof b); // number
console.log(typeof c); // function
console.log(typeof f); // boolean
console.log(typeof g); // undefined
console.log(typeof h); // object
console.log(typeof j); // object
注意:
调用typeof null 返回 Object.这是因为特殊值null 被认为是一个对空对象的引用
instanceof
instanceof 是一个 JavaScript 运算符,用于判断一个对象是否是另一个对象的实例。
语法是: `object instanceof constructor`
object 是要检测的对象,constructor 是某个构造函数。
例如:
var arr = [];
arr instanceof Array; // true
arr instanceof Object; // true
arr instanceof Function; // false
instanceof 的内部实现机制是通过查找对象的原型链上是否有构造函数的 prototype 属性所指向的对象。
两者的区别
typeof 和 instanceof 都是用来判断数据类型的方法,但它们有以下区别:
- typeof 会返回一个变量的基本类型,例如 ‘number’, ‘string’, ‘boolean’ 等。instanceof 会返回一个 布尔值,表示一个对象是否是另一个对象的实例。
- typeof 主要用来判断基础数据类型,instanceof 则是 用来判断引用数据类型。
- typeof 是根据数据在存储单元中的类型标签来判断数据的类型,instanceof 则是根据函数的 prototype 属性值是否存在于对象的原型链上来判断数据的类型。
- typeof 对于 null 和 数组 会返回 ‘object’,对于函数会返回 ‘function’。instanceof 对于 null 会返回 false,对于数组和函数会返回 true。