资讯详情

资讯详情

JavaScript 有哪些数据类型?如何准确判断类型?

核心思路一句话JavaScript 有8 种数据类型7 种原始类型 1 种对象类型类型判断不能“一招通吃”应根据场景选择typeof、 null、Array.isArray()、instanceof和Object.prototype.toString.call()。一、数据类型JavaScript 数据类型 │ ├── 原始类型 │ ├── undefined │ ├── null │ ├── boolean │ ├── number │ ├── string │ ├── symbol │ └── bigint │ └── Object ├── Object ├── Array ├── Date ├── RegExp ├── Map ├── Set └── Function二、类型判断怎么选判断值的类型 │ ┌────────────┴────────────┐ ↓ ↓ 原始类型/函数 对象具体类型 │ │ typeof ┌────────┼─────────┐ │ ↓ ↓ ↓ │ 数组 实例关系 内置类型 │ │ │ │ │ Array.isArray instanceof Object.prototype.toString │ ↓ null 特殊处理 │ value null三、核心区别typeof适合判断基础类型和函数但null返回object数组和普通对象也都是object。 null准确判断null。Array.isArray()判断数组的首选方案。instanceof判断对象的原型链上是否存在某个构造函数的prototype。Object.prototype.toString.call()可以进一步区分Array、Date、RegExp、Map、Set等内置对象。四、必须记住的几个坑typeofnullobject;typeof[]object;typeof{}object;typeoffunction(){}function;[]instanceofObjecttrue;其中[]instanceofObject是因为数组的原型链是[] ↓ Array.prototype ↓ Object.prototype ↓ null五、底层原理typeof是语言提供的类型判断运算符。instanceof核心是检查原型链value ↓ value 的原型 ↓ 继续向上查找 ↓ 是否找到 Constructor.prototypeObject.prototype.toString.call(value)则利用Object.prototype.toString对值进行类型标签判断可以得到[object Array] [object Date] [object Map] [object Set]注意Object.prototype.toString.call()可以用于区分很多具体对象类型但它的类型标签可以通过Symbol.toStringTag定制因此不能简单理解成绝对可靠、不可伪造的类型判断。六、实际开发原则判断 null → value null 判断数组 → Array.isArray(value) 判断基础类型和函数类型 → typeof value 判断某个类的实例 → value instanceof Constructor 判断具体内置对象 → Object.prototype.toString.call(value)一句话总结不要问“哪一种类型判断方法最准确”而要问“当前场景需要判断什么”。typeof负责基础类型Array.isArray负责数组instanceof负责原型链上的实例关系Object.prototype.toString.call负责进一步识别对象类型null则必须单独用 null判断。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →