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 的原型链上。
- 其中getPrototypeOf() 方法来获得实例的原型对象!!
constructor(少用)
先区分一下 constructor 、prototype
prototype属性是函数特有的constructor和__proto__属性是对象特有的- 所以函数(本质上也是对象)有
constructor、__proto__、prototype三种属性 - 所以,除了基本引用类型,一些特 JS 内置的对象还有原始值包装类型的对象都有
constructor和__proto__属性!!!
-
前三个 ,按理说 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 类型 ] 格式的字符串
补:判断数组的方法
-
arr instanceof Array
-
Object.prototype.toString().call(arr)
-
Array.isArray(arr)
-
Array.prototype.isPrototypeOf(arr)