基本类型
- undefined
- null
- Boolean
- Number
- String
- Object
- Symbol(ES6)
常见的引用类型
- function
- Array
- set
- map
…
一般来说有三种检测类型的方法:typeof 、instanceof 和 Object.proprety.toString.call()
typeof
//typeof
console.log("typeof:")
console.log(typeof(undefined)); //undefined
console.log(typeof(null)); //object
console.log(typeof(false)); //boolean
console.log(typeof(123)); //number
console.log(typeof("123")); //string
console.log(typeof({})); //object
console.log(typeof(Symbol(1)));//symbol
console.log(typeof([])); //object
instanceof
console.log("instanceof:")
// console.log(undefined instanceof undefined); //报错
// console.log(null instanceof null); // 报错
console.log(false instanceof Boolean);
console.log(new Boolean(false) instanceof Boolean);
console.log(123 instanceof Number);
console.log(new Number(123) instanceof Number);
console.log("123" instanceof String);
console.log(new String("123") instanceof String);
console.log({} instanceof Object);
console.log(Symbol(1) instanceof Symbol);
console.log([] instanceof Array);
instanceof的原理是查找对象中的原型链上是否有第二个参数的构造函数,如果有则返回true,反之false。
Object.proprety.toString.call()
console.log("Object.property.toString.call():")
//Object.property.toString.call()
console.log(Object.prototype.toString.call(undefined)) //报错
console.log(Object.prototype.toString.call(null)) //报错
console.log(Object.prototype.toString.call(false))
console.log( Object.prototype.toString.call(123))
console.log(Object.prototype.toString.call("123"))
console.log(Object.prototype.toString.call({}));
console.log(Object.prototype.toString.call(Symbol(1)));
console.log(Object.prototype.toString.call([]));
在检测基本类型如,number、boolean时会将其转为对应的引用类型。
参考
红宝书
https://blog.youkuaiyun.com/zjy_android_blog/article/details/81023177