JavaScript类型识别
类型系统
关于 JS 类型的几点说明
- JavaScript 是动态类型 + 弱类型的语言
- JavaScript 的变量。属性在运行期决定类型
- JavaScript 存在隐式类型转换
- JavaScript 有一系列识别类型的反射方法
javascript 类型系统可以分为标准类型和对象类型,进一步标准类型又可以分为原始类型和引用类型,而对象类型又可以分为内置对象类型、普通对象类型、自定义对象类型。
.
类型转化表
Value | Boolean | Number | String |
---|---|---|---|
undefined | false | NaN | “undefined” |
null | false | 0 | “null” |
true | true | 1 | “true” |
false | false | 0 | “false” |
“” | false | 0 | “” |
‘123’ | true | 123 | ‘123’ |
‘1a’ | true | NaN | ‘1a’ |
0 | false | 0 | “0” |
1 | true | 1 | “1” |
Infinity | true | Infinity | “Infinity” |
NaN | false | NaN | ‘NaN’ |
{} | true | NaN | “[object Object]” |
类型判断
typeof
Object.prototype.toString
constructor
instanceof
typeof
- 可以识别标准类型(
null
除外) - 不可识别具体的对象类型(
Function
除外)
例:
1 | //1. 可以识别标准类型(`null`除外) |
instanceof
- 能够判别内置对象类型
- 不能判别原始类型
- 能够判别自定义类型
例:
1 | //1. 能够判别内置对象类型 |
Object.prototype.toString.call()
方法
- 可以识别标准类型,及内置对象类型
- 不能识别自定义类型
例:
1 | //1. 可以识别标准类型,及内置对象类型 |
- 为了方便使用,使用函数封装如下:
1
2
3
4
5
6function typeProto(obj) {
return Object.prototype.toString.call(obj).slice(8,-1);
}
typeProto("guo");//"String"
typeProto({});//"Object"
constructor
constructor
指向构造这个对象的构造函数本身..
- 可识别原始类型
- 可识别内置对象类型
- 可识别自定义类型
例:
1 | //1. 可识别原始类型 |
- 为了方便使用,使用函数封装如下:
1 | function getConstructorName(obj){ |
类型判断对比表
- 其中红色的单元格表示该判断方式不支持的类型。