检测自有属性用hasOwnProperty()最常用高效检测自有继承属性用in操作符最自然避免Object.keys().includes()因性能差且语义冗余安全场景用Object.prototype.hasOwnProperty.call()。在 JavaScript 中检测对象属性是否存在常用方法有 in 操作符、hasOwnProperty()、Object.prototype.hasOwnProperty.call() 和 Object.keys().includes()或 Object.getOwnPropertyNames()。它们语义不同、适用场景不同性能也有明显差异。直接比“谁最快”意义不大关键看你要检测的是“自有属性”还是“原型链上也接受的属性”以及是否需要兼容老旧环境。检测自有属性hasOwnProperty() 最常用且高效obj.hasOwnProperty(prop) 是判断属性是否为对象**自身拥有**非继承的标准方式。它不遍历原型链内部实现高度优化在现代引擎中几乎无额外开销。? 语义清晰只关心对象自身属性 ? 性能优秀V8、SpiderMonkey 等引擎对它做了内联和快速路径优化 ?? 注意若对象自身重写了 hasOwnProperty 方法极少见会出错此时应使用 Object.prototype.hasOwnProperty.call(obj, prop)检测自有继承属性in 操作符最自然prop in obj 会检查属性是否存在于对象本身或其整个原型链上。它是语法级操作符无需函数调用开销引擎同样做了深度优化。? 语义明确适合“这个 key 能否被 obj 访问到”这类场景如配置合并、兜底逻辑 ? 性能接近原生比任何基于数组的方法快一个数量级以上 ? 不区分属性来源无法判断是自有还是继承也不过滤不可枚举属性避免使用 Object.keys().includes() —— 性能差且语义冗余Object.keys(obj).includes(prop) 先生成所有可枚举自有属性的数组再遍历查找。即使属性存在也要构造数组、遍历、比较字符串。 JoinMC智能客服 JoinMC智能客服帮您熬夜加班7X24小时全天候智能回复用户消息自动维护媒体主页全平台渠道集成管理电商物流平台一键绑定让您出海轻松无忧