urlname
type
Post
password
SyncToConfluence
category
编程基础
date
May 13, 2024
slug
01HXPYMBMXH4A54AKDKRTAHM5X
icon
Button
catalog
summary
tags
JavaScript
编程语言
cover
Status
BusyTime
Status 1
status
Published
在 JavaScript 的日常开发中,了解和使用
typeof 和 instanceof 是处理类型检测的关键。这两个操作符虽然简单,但是了解它们的细节可以帮助我们写出更健壯和可靠的代码。typeof 操作符
typeof是一个一元操作符,用于检测一个变量的数据类型。它的语法十分简单:
- 这里是
typeof的一些基本用法和返回值示例: typeof 123返回"number"typeof 'jartto'返回"string"typeof true返回"boolean"typeof undefined返回"undefined"typeof {name: 'jartto'}返回"object"typeof [1,2,3]返回"object"typeof new Function()返回"function"typeof null返回"object"
注意事项:
- 基本类型: 对于基本数据类型(除了
null),typeof能准确返回类型。
- 引用类型: 对于对象和数组,
typeof均返回"object",这使得它在判断数组和普通对象时不够精确。
- 函数类型:对函数的检测结果为
"function"。
null的特殊情况:typeof null的结果为"object",这是一个历史遗留的bug,需要特别注意。
- 未声明的变量:
typeof可以判断出未声明的变量,并返回"undefined"
- ES6 的暂时性死区: 使用
let和const声明的变量在声明前访问会产生引用错误,即使是在typeof操作中。
instanceof 操作符
instanceof是用来测试一个对象在其原型链中是否存在一个构造函数的prototype属性。
- 它的表达式如下:
- 如果对象继承自构造函数的原型,则返回
true,否则返回false。以下是一些常见示例: [] instanceof Array返回true{}instanceof Object返回truenew Date() instanceof Date返回truenew Person() instanceof Object返回true
关于原型链:
当检查
instanceof 时,JavaScript 会沿着对象的原型链向上寻找,直到找到对应的原型或到达原型链的末端(null)。例如:扩展知识和常见问题
- 数组的检测: 由于
typeof对数组返回"object",更好的数组检测方法是使用Array.isArray([])。
- 闭包中的变量提升: 在闭包中由于变量提升,即使内部变量未定义,
typeof也不会报错,但会返回"undefined"。
总结
typeof 和 instanceof 都是非常有用的工具,但它们有各自的适用场景和局限性。typeof 适合基本类型的检测和判断变量是否声明,而 instanceof 更适合检查对象的类型和实现基于原型的继承检查。理解这些操作符的内部机制,可以帮助我们更精确地控制代码和避免常见的陷阱。参考\推荐
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/01HXPYMBMXH4A54AKDKRTAHM5X
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts

