用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
object.hasown是es2022新增的安全替代方案,用于准确检查对象自有属性,避免hasownproperty被覆盖或无原型对象报错问题,语法为object.hasown(obj, prop),支持symbol和数字键。

ES6 新增的 Object.hasOwn() 是 Object.prototype.hasOwnProperty 的更安全、更直接的替代方案,专为检查对象**自有属性**(非继承)而设计。它解决了传统写法中常见的 this 绑定丢失问题,也避免了对象自身覆盖 hasOwnProperty 方法导致的误判。
为什么需要替代 hasOwnProperty?
传统写法 obj.hasOwnProperty(prop) 有两大隐患:
- 如果
obj自身定义了同名方法(比如{ hasOwnProperty: () => false }),调用会直接走自己的逻辑,返回错误结果; - 若把
hasOwnProperty当作普通函数提取使用(如const check = obj.hasOwnProperty),再调用check('x')会因this丢失而报错或返回false。
Object.hasOwn() 的正确用法
语法统一、无绑定依赖:Object.hasOwn(obj, propKey)
第一个参数是目标对象,第二个是属性名(字符串或 Symbol),返回布尔值。
-
Object.hasOwn({a: 1}, 'a')→true -
Object.hasOwn({a: 1}, 'toString')→false(toString来自原型) -
Object.hasOwn(Object.create({b: 2}), 'b')→false(b是继承属性)
兼容旧环境的稳妥写法
若需支持尚未内置 Object.hasOwn 的运行时(如部分旧版 Node.js 或浏览器),可用以下 polyfill:
if (!Object.hasOwn) {<br> Object.hasOwn = Object.prototype.hasOwnProperty.call.bind(Object.prototype.hasOwnProperty);<br>}
⚠️ 注意:不能简写为 Object.hasOwn = Object.prototype.hasOwnProperty —— 这样会丢失 this 绑定,导致后续调用失效。
对比小结:何时该用哪个?
日常开发中,优先使用 Object.hasOwn(obj, key):
- 语义清晰,意图明确;
- 不依赖
obj的原型链或自身方法; - 在解构、工具函数、高阶函数中更健壮。
仅当明确需要检测「某个对象实例是否重写了 hasOwnProperty」这类极特殊场景时,才考虑直接访问原型方法——但这种情况几乎不存在。










