typeof与instanceof在前端面试中的区别及应用

需积分: 0 0 下载量 43 浏览量 更新于2024-08-04 收藏 31KB DOCX 举报
前端工程师面试中,关于`typeof`与`instanceof`的考察是常见的技术难题。这两个关键字在JavaScript中有着不同的用途,理解和掌握它们的区别至关重要。 1. typeof运算符: - `typeof`是一个全局操作符,它返回一个字符串,表示给定表达式的类型。例如: - `typeof 1` 返回 `"number"`,因为1是一个数字。 - `typeof '1'` 返回 `"string"`,因为这是一个字符串字面量。 - `typeof undefined` 返回 `"undefined"`,表示未定义的变量。 - `typeof true` 返回 `"boolean"`,表示布尔值。 - `typeof Symbol()` 返回 `"symbol"`,JavaScript中的原始类型之一。 - `typeof null` 实际上返回 `"object"`,这是一个历史遗留问题,尽管null并不是对象,但不建议依赖此结果判断。 - 在处理变量存在性时,`typeof` 可以用于避免`ReferenceError`,如: ```javascript if (typeof a !== 'undefined') { // 变量a存在 } ``` - 但是,`typeof` 无法准确区分引用类型(如对象和数组)和非对象(如函数),它们都会被识别为 "object"。 2. instanceof运算符: - `instanceof` 是一个二元操作符,用来检查一个对象是否是由指定构造函数创建的实例。 - 例如,`let car = function() {}`, `let benz = new car();`,此时 `benz instanceof car` 将返回 `true`,表明`benz`是一个`car`构造函数的实例。 - `let car = new String('xxx');` 和 `let str = 'xxx';` 的区别在于,`car instanceof String` 为 `true`,而 `str instanceof "string"` 不是有效的语法,应为 `str instanceof String`。 - `instanceof` 可以用于确认对象的继承关系,对于检查一个值是否是某个类的实例非常有用。 总结来说,在面试中,候选人可能被问到如何正确使用`typeof`来检测数据类型以及何时选择使用`instanceof`来检查对象的起源。了解这些基本概念并能够给出恰当的示例和解释,对于前端工程师来说是不可或缺的基础技能。同时,面试者还可能测试对JavaScript特性的深入理解,如`typeof null`的异常情况,以及`instanceof`对继承的精确判断。