JS类型判断

83 阅读1分钟

今天不扯那么多别的,直接上干货!

typeof()

  1. 可以判断除null之外的原始类型
  2. 无法判断除function之外的引用类型
let str = 'Damn'
let num = 123
let flag = false
let un = undefined
let nu = null

let obj = {}
let arr = []
let fn = function (){}

console.log(typeof (str));  // String
console.log(typeof (num));  // Number
console.log(typeof (flag)); // Boolean
console.log(typeof (un));   // Undefined

console.log(typeof (nu));   // Object

console.log(typeof (obj));  // Object
console.log(typeof (arr));  // Object
console.log(typeof (fn));   // Function

输出结果如下:

image.png

  • typeof的判断原理是:将值转换为二进制后看其前三位是不是0,除了函数,所有的引用类型的二进制前三位都是0,null的二进制全部是0

instanceof()

  1. 只能用于判断引用类型
let str = 'Damn'
let num = 123
let flag = false
let un = undefined
let nu = null

let obj = {}
let arr = []
let fn = function (){}

console.log(str instanceof String);  // false
console.log(num instanceof Number);  // false
console.log(flag instanceof Boolean);// false

console.log(obj instanceof Object);  // true
console.log(arr instanceof Array);   // true
console.log(fn instanceof Function); // true

输出结果如下:

image.png

是通过原型链的查找来判断。

Object.protype.toString()

  • Object.protype.toString().call(x)

  • toString()

  1. 对象的toString():[object Object]
  2. 数组的toString(): 将数组中的元素用逗号的方式拼接成字符串
  3. 其他的toString():直接将值修改成字符串字面量
let a = [1,2,3]
let b = {a: 1}
let c = 'Damn'
console.log(a.toString());
console.log(b.toString());
console.log(c.toString());

输出结果如下:

image.png

  • Object.prototype.toString(x)
  1. 如果 toString接受的值是 undefined,则返回“[object Undefined]”
  2. 如果 toString接受的值是 null,则返回“[object null]”
  3. 调用 ToObject(x) 将x转化为对象,此时得到的对象内部一定拥有一个属性[[class]],而该属性[[class]]的值就是 x 的类型
  4. 设 class是[[class]]的值
  5. 返回由"[object" 和 class 和 "]" 拼接得到的字符串
let a = [1,2,3]
let b = {a: 1}
let c = 'Damn'

console.log(Object.prototype.toString(b));
console.log(Object.prototype.toString.call(a));
console.log(Object.prototype.toString.call(c));

输出结果如下:

image.png

Array.isArray

只能用于判断是否为数组类型

let arr = []
let num = 0
let str = 'Damn'
console.log(Array.isArray(arr));
console.log(Array.isArray(num));
console.log(Array.isArray(str));

输出结果如下:

image.png