JavaScript 是一个弱类型语言,当操作涉及不匹配的类型时,它会进行隐式类型转换,不会抛出类型错误。
一、七种基本类型
Null,Undefined,Boolean,Number,String,Symbol,BigInt。
除了 Object 以外,所有类型都定义不可变值(原始值)。除了Null以外都可以用typeof去判断类型。
二、引用类型
都叫对象,Object。
常用的三种引用类型:
Object,
Array,
Function
其他:
Date、RegExp、Map、Set…
三、判断数据类型的方法
1、判断基本类型 typeof
基本数据类型除了 null 都可以用 typeof 判断
语法:typeof 变量名
返回值:类型 string
类型 | typeof 返回值 | 对象包装器
Null | "object" | 不适用
Undefined | "undefined" | 不适用
Boolean | "boolean" | Boolean
Number | "number" | Number
String | "string" | String
Symbol | "symbol" | Symbol
BigInt | "bigint" | BigInt
2、判断引用类型 instanceof
instanceof 运算符用来判断一个构造函数的 prototype 属性所指向的对象是否存在另外一个要检测对象的原型链中。
语法:实例对象 instanceof 构造函数
返回值:boolean
a instanceof b
: 判断 a 的原型链上是否有 b
实现一个instanceof
Object.isPrototypeOf(obj)
:判断 Object
是否在 obj
的原型链上出现过。
🌰 实现case1:
function _instanceof(left, right) {
// 🏷 敲重点
return right.prototype.isPrototypeOf(left);
}
🌰 实现case2:
function _instanceOf(left, right) {
if (left === null || (typeof left !== 'function' && typeof left !== 'object') ) {
return false;
}
// 🏷 敲重点
while (left.__proto__) {
if (left.__proto__ === right.prototype) {
return true;
}
left = left.__proto__;
}
return false;
}
3、判断数组 Array.isArray(obj)
语法:Array.isArray(obj)
返回值:boolean
4、判断所有类型 Object.prototype.toString.call(obj)
判断任何类型都可以使用这个方法。
语法:Object.prototype.toString.call(obj)
返回值:字符串 "[object type]"
, type
是数据类型