You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测JavaScript原始值是否包含指定属性?

检测变量是否包含指定属性的通用方案

针对你遇到的问题——检测原始值(如字符串)是否包含某个原型链上的属性,这里有几个符合现代JS规范的通用解决方案:

方案1:使用Reflect.has()

这是最推荐的方式,Reflect.has()会自动处理原始值的装箱操作,无需手动转换对象,同时支持检测对象及原型链上的属性:

var x = 'some string';
if (Reflect.has(x, 'trim')) {
  console.log('x 包含 trim 属性');
}

方案2:将原始值转为包装对象后使用in操作符

通过Object()将原始值转换为对应的包装对象,再用in操作符检测:

var x = 'some string';
if ('trim' in Object(x)) {
  console.log('x 包含 trim 属性');
}

方案3:通过Object.getPrototypeOf()获取原型后检测

用标准的Object.getPrototypeOf()替代废弃的__proto__,获取值的原型对象后再用in操作符,注意需要先排除null和undefined(因为这两个值无法获取原型):

var x = 'some string';
if (x != null && 'trim' in Object.getPrototypeOf(x)) {
  console.log('x 包含 trim 属性');
}

补充说明

  • 如果仅需检测自身属性(而非原型链上的),可以使用Object.prototype.hasOwnProperty.call(x, prop),同样支持原始值:
    // 示例:检测对象自身是否有某个属性
    var obj = { name: 'test' };
    if (Object.prototype.hasOwnProperty.call(obj, 'name')) {
      console.log('obj 自身包含 name 属性');
    }
    
  • 避免直接使用x.hasOwnProperty(),因为如果x是null/undefined会报错,且如果对象重写了hasOwnProperty方法也会出问题。

内容的提问来源于stack exchange,提问作者LukasKroess

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 14:07:07