# 4.类型判断

作者:喵喵同学嘛 链接:https://www.jianshu.com/p/ddc7f189d130 来源:简书

# 1. typeof(识别除了 null 之外的基本类型)

console.log(typeof bool); //boolean
console.log(typeof num); //number
console.log(typeof str); //string
console.log(typeof und); //undefined
console.log(typeof nul); //object
console.log(typeof arr); //object
console.log(typeof obj); //object
console.log(typeof fun); //function
console.log(typeof s1); //symbol
1
2
3
4
5
6
7
8
9
  • typeof 可以识别出基本类型 boolean,number,undefined,string,symbol,但是不能识别 null。不能识别引用数据类型,会把 null、array、object 统一归为 object 类型,但是可以识别出 function。 所以 typeof 可以用来识别一些基本类型

# 2. instanceof(判断引用类型和继承关系)

console.log(bool instanceof Boolean); // false
console.log(num instanceof Number); // false
console.log(str instanceof String); // false
console.log(und instanceof Object); // false
console.log(nul instanceof Object); // false
console.log(arr instanceof Array); // true
console.log(obj instanceof Object); // true
console.log(fun instanceof Function); // true
console.log(s1 instanceof Symbol); // false
1
2
3
4
5
6
7
8
9

从结果中看出 instanceof不能识别出基本的数据类型 number、boolean、string、undefined、unll、symbol。 但是可以检测出引用类型,如 array、object、function,同时对于是使用 new 声明的类型,它还可以检测出多层继承关系。 其实也很好理解,js 的继承都是采用原型链来继承的。比如 objA instanceof A ,其实就是看 objA 的原型链上是否有 A 的原型,而 A 的原型上保留 A 的 constructor 属性。 所以instanceof 一般用来检测对象类型,以及继承关系

# 3.Object.prototype.toString.call

console.log(Object.prototype.toString.call(bool)); //[object Boolean]
console.log(Object.prototype.toString.call(num)); //[object Number]
console.log(Object.prototype.toString.call(str)); //[object String]
console.log(Object.prototype.toString.call(und)); //[object Undefined]
console.log(Object.prototype.toString.call(nul)); //[object Null]
console.log(Object.prototype.toString.call(arr)); //[object Array]
console.log(Object.prototype.toString.call(obj)); //[object Object]
console.log(Object.prototype.toString.call(fun)); //[object Function]
console.log(Object.prototype.toString.call(s1)); //[object Symbol]
1
2
3
4
5
6
7
8
9

此方法可以相对较全的判断 js 的数据类型。 至于在项目中使用哪个判断,还是要看使用场景,具体的选择,一般基本的类型可以选择 typeof,引用类型可以使用 instanceof。

# 判断是不是函数

# 1. fun1 instanceOf Function

# 2. fun1.__proto__== Function.prototype

# 3. typeof

# 4. Object.prototype.toString.call() =>// '[object Function]'

# 5. constructor

# 判断是不是数组

# 1. arr1 instanceOf Array

# 2. arr1.__proto__==Array.prototype

# 3. Array.isArray(最好用的)

# 4. Object.prototype.toString.call() =>//'[object Array]'

# 5. constructor

关于判断方法更详细介绍看:js 类型判断 (opens new window)

Last Updated: 6/3/2024, 1:08:34 AM