Skip to content

四种判断方法

typeof

基本类型数据(除了Null,返回‘object’)都能准确检测;

大部分引用类型(除了Function,返回'function'),其他都不能准确检测(返回'object')

javascript
	console.log(typeof 1); // 'number'
  console.log(typeof 'lunlun'); // 'string'
  console.log(typeof false); // 'boolean'
  console.log(typeof function () {}); // 'function'
  console.log(typeof undefined); // 'undefined'
  console.log(typeof {}); // 'object'
  console.log(typeof []); // 'object'
  console.log(typeof null); // 'object'

instanceof

只能准确判断引用类型(原理是:右边变量的prototype在左边变量的原型链上)

只能判断实例关系,不能判断具体类型

javascript
	console.log(7 instanceof Number); // false

	let num =new Number(1);
	console.log(num instanceof Number) //true

  console.log('7' instanceof String); // false
  console.log(false instanceof Boolean); // false
  console.log([] instanceof Array); //true
  console.log(function () {} instanceof Function); // true
  console.log({} instanceof Object); // true
  let date = new Date()
	console.log(date instanceof Date ); // true
    // undefined is not a constructor
    // null is not a constructor

constructor

都能准确检测,但null和undefined不能被检测,没有原生构造函数

javascript
let num = 123;
let str = "biu~";
let date = new Date();
let reg = new RegExp();
let bool = true;
let fn = function () {};
let array = [1, 2, 3];
let obj = {} 
console.log(num.constructor === Number)//true
console.log(str.constructor === String)//true
console.log(bool.constructor === Boolean)//true
console.log(date.constructor === Date)//true
console.log(reg.constructor === RegExp)//true
console.log(fn.constructor === Function)//true
console.log(array.constructor === Array)//true
console.log(obj.constructor === Object)//true

Object.prototype.toString.call()

都能准确检测

javascript
Object.prototype.toString.call();
console.log(toString.call(123));          //'[object Number]'
console.log(toString.call('123'));        //'[object String]'
console.log(toString.call(undefined));    //'[object Undefined]'
console.log(toString.call(null));    	    //'[object Null]'
console.log(toString.call(true));         //'[object Boolean]'
console.log(toString.call({}));           //'[object Object]'
console.log(toString.call([]));           //'[object Array]'
console.log(toString.call(function(){})); //'[object Function]'