在 JavaScript 里,我们通常用哪些方法来检测一个值的数据类型?
考察说明
考查对 JavaScript 类型检测机制的掌握程度及适用场景区分。
回答思路
- 【回答框架 1】typeof 操作符返回一个表示类型的字符串,适合基本类型和函数,但对 null 返回 object 且无法区分数组与普通对象。
- 【回答框架 2】instanceof 通过原型链判断对象是否属于某个构造函数的实例,可用于检测数组、日期等引用类型,但跨 iframe 或原型修改时结果不可靠。
- 【回答框架 3】Object.prototype.toString.call 能返回统一的内部类型标签,如 [object Array]、[object Null],是判断内置类型最可靠的方式。
- 【回答框架 4】Array.isArray 专门用于检测数组,ES6 引入,比 instanceof 更稳健,但仅适用于数组。
- 【回答框架 5】日常开发中常组合使用这些方法,先 typeof 处理基本类型,再结合其他方式处理引用类型。
- 【关键点 1】typeof 对 null 返回 object,对函数返回 function。
- 【关键点 2】Object.prototype.toString.call 可准确识别所有内置类型。
- 【关键点 3】Array.isArray 是检测数组的推荐方法。
- 【关键点 4】instanceof 受原型链影响,跨上下文可能失真。
- 【易错点 1】不要用 typeof 判断数组或 null,结果不准确。
- 【易错点 2】instanceof 在跨 iframe 或修改原型后可能失效。
- 【易错点 3】Object.prototype.toString 对自定义类实例只能返回 [object Object]。