最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JavaScript 中 in 运算符用于对象静态成员的用法
时间:2026-07-16 18:18:06 编辑:袖梨 来源:一聚教程网
in运算符判断属性名是否存在于对象自身或原型链中,返回布尔值;检测静态成员需以构造函数为右操作数,如"x" in Array为true,而"x" in new Array()为false。
in 运算符用于判断某个属性名(字符串或 Symbol)是否存在于对象自身或其原型链中,返回 true 或 false。它不区分“静态成员”或“实例成员”,只认“属性是否存在”——包括自有属性、继承属性,甚至方法(如 toString)、访问器属性等。
检查对象自身的静态属性(即直接定义在构造函数上的属性)
JavaScript 中所谓“静态成员”,通常指挂载在构造函数(类)本身上的属性或方法,而非实例上。这类属性不属于实例对象,不能通过 instance in obj 检测到,因为 in 只查对象及其原型链,不查其构造函数。
- 例如:
Array.from是Array构造函数的静态方法,但"from" in []返回false(数组实例不含该属性) -
"from" in Array才为true,因为此时右操作数是构造函数本身(一个对象) - 自定义类同理:
class C { static x = 1; };"x" in C→true;"x" in new C()→false
检测继承来的静态方法(需注意原型链层级)
某些“静态方法”实际来自内置构造函数的原型(如 Date.now),但绝大多数静态成员直接挂在构造函数上。只要目标是构造函数对象本身,in 就能正常检测:
-
"now" in Date→true -
"PI" in Math→true(Math是普通对象,所有属性都是“静态”的) -
"length" in Function→true(Function构造函数自身有length属性)
不能用 in 判断实例能否调用静态方法
in 不关心“能否调用”,只回答“这个键是否存在”。即使某静态方法存在,也不能靠 in 推断实例是否可访问它:
立即学习“Java免费学习笔记(深入)”;
-
"map" in []→false(map在Array.prototype上,不是数组实例自有) -
"map" in Array.prototype→true -
"map" in Array→false(Array构造函数自身没有map)
注意事项:右操作数必须是对象
想检测静态成员,右操作数得是构造函数(如 Array、Date、自定义类名),不能是原始值或 undefined:
- ✅
"x" in MyClass(MyClass是函数对象) - ❌
"x" in undefined→ 报错(TypeError) - ❌
"x" in 42→ 报错(数字不是对象) - ⚠️
"x" in new String("a")→ 可行(包装对象是对象),但一般不用这种方式查静态成员
相关文章
- 让一线大厂 P7 P8 P9 给你出谋划策:我开源了 3 个 Skills 07-17
- volatile 这题别只答可见性:面试官真正想听的是这条 happens-before 07-17
- Spring Boot 4.0 与 gRPC 极简集成:4步搞定 比REST还丝滑 07-17
- 应用计算希望为石油和天然气运营商提供整个工厂的人工智能模型 | TechCrunch 07-17
- 每日一个开源项目(第160篇):Destructive Command Guard - 在 AI Agent 执行 rm -rf 前将其拦截 07-17
- 豆包视频通话背后:火山引擎重构 Agent 时代多模态传输底座 07-17