JS(12)数据类型的判断【简单and复杂】

64 阅读1分钟

type of 操作符

7 个返回值,且返回值是以字符串的形式返回!!!【少 null 、bigInt,多 function

  • "number"
  • "string"
  • "boolean"
  • "undefind"
  • "symbol"
  • "object"
  • "function"

注意:

  • 该方法,不能区分 object 和 null ,即 typeof null 返回的也是 "object"

instanceof 【只能判断引用数据类型,不能判断基本数据类型】

A instanceOf B 是判断 A 是不是 B 的实例。那就看 B 的原型对象在不在 A 的原型链上。

2421.webp

  • 其中getPrototypeOf()  方法来获得实例的原型对象!!

constructor(少用)

先区分一下 constructor 、prototype

  • prototype 属性是函数特有的
  • constructor 和 __proto__ 属性是对象特有的
  • 所以函数(本质上也是对象)有constructor__proto__prototype三种属性
  • 所以,除了基本引用类型,一些特 JS 内置的对象还有原始值包装类型的对象都有constructor 和 __proto__ 属性!!!

2422.webp

  • 前三个 ,按理说 2 、true 、'str' 都属于原始值类型,按理说是不能用 constructor 方法进行检验的!!!但看结果好像成功了,是因为它们加了括号()!!

  • (1) 等价于 Number(1) ,只不过省略了前面的具体化数据类型 Number

  • Number(1) 和 1 可就大不一样了, Number(1)是对 1 的装箱!!!装箱过后就变成了原始值包装类型,它身上就有constructor__proto__ 属性了!!

Object.prototype.toString().call(xx)

注意:

使用的是 Object 原型上的 toString 方法 ,而不是要检测的东西上的 toString 方法,因为像 Array、function等类型作为 Object 的实例都重写了 toString 方法, 所以如果直接在数组实例上调用 [ 1 , 2 , 3 ].toString() ,那么得到的是该数组元素组成的字符串!!!!

该方法返回的是 [ object 类型 ] 格式的字符串

2423.png

2425.png

补:判断数组的方法

  • arr instanceof Array

  • Object.prototype.toString().call(arr)

  • Array.isArray(arr)

  • Array.prototype.isPrototypeOf(arr)