1 - 类型检测
1、typeof
可检测的数据类型:null、undefined、string、number、boolean,object、function,
注意:对于数组、日期、正则都会识别为object
2、instanceof
instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
console.info(Array instanceof Object) // true
const arr = []
console.info(arr instanceof Array) // true
console.info(arr instanceof Object) // true
console.info(fn instanceof Function) // false
const obj = {}
console.info(obj instanceof Array) // false
console.info(obj instanceof Object) // true
console.info(fn instanceof Function) // false
const fn = () => {}
console.info(fn instanceof Array) // false
console.info(fn instanceof Object) // true
console.info(fn instanceof Function) // true
引用类型 instanceof Object 都是 true
2 - instanceof 对数组、正则、日期对象的检测
①数组:
// 1 - Array.isArray()
console.info( Array.isArray( [] ) ) // true
// 2 - instanceof
const arr = []
console.info(arr instanceof Array) // true
②正则:
const reg = /^1[3456789]d{9}$/
console.info(reg instanceof RegExp) // true
// 字符串正则需要使用 eval() 转化为正则
const reg = '/^1[3456789]d{9}$/'
console.info(eval(reg) instanceof RegExp) // true
③日期对象:
const date = new Date()
console.info(date instanceof Date) // true
3 - Object.prototype.toString.call 类型检测
对于 Object.prototype.toString() 方法,会返回一个形如 "[object XXX]" 的字符串。
Object.prototype.toString.call(null); // => "[object Null]"
Object.prototype.toString.call(undefined); // => "[object Undefined]"
Object.prototype.toString.call(true); // => "[object Boolean]"
Object.prototype.toString.call(1); // => "[object Boolean]"
Object.prototype.toString.call(""); // => "[object String]"
Object.prototype.toString.call([]); // => "[object Array]"
Object.prototype.toString.call((function() {
return arguments;
})()); // => "[object Arguments]"
Object.prototype.toString.call(function(){}); // => "[object Function]"
Object.prototype.toString.call(new Error()); // => "[object Error]"
Object.prototype.toString.call(/\d+/); // => "[object RegExp]"
Object.prototype.toString.call(new Date()); // => "[object Date]"
Object.prototype.toString.call(new class {}); // => "[object Object]"
Object.prototype.toString.call(function * (){}); // => "[object GeneratorFunction]"