首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有ES6+替代Object.prototype.hasOwnProperty.call(obj,key)?

是否有ES6+替代Object.prototype.hasOwnProperty.call(obj,key)?
EN

Stack Overflow用户
提问于 2017-07-20 13:09:22
回答 2查看 16.8K关注 0票数 22

检查对象是否有特定密钥的最防弹方法是:

代码语言:javascript
复制
Object.prototype.hasOwnProperty.call(obj, key)

这提供了一定的保证:只有当keyobj直接属性时,它才能计算为obj,并且即使obj没有通常的Object作为它的原型(例如,如果它是用const obj = Object.create(null)创建的),它也会工作。

但这是一口。

在ES6或更高版本(包括多填充或Babel-可编译的“建议”)中,是否有任何新的语法/方法可以提供同样的保证,但以更好、更易读的方式?

EN

回答 2

Stack Overflow用户

发布于 2021-08-12 15:30:48

Object.hasOwn添加到对象标准API中。现在所有主要浏览器都支持它。

票数 4
EN

Stack Overflow用户

发布于 2022-11-30 15:03:39

对于那些想的人来说,节省了一些时间

我做了一些改进,直接使用Javascript/Typescript函数,享受!)

代码语言:javascript
复制
static getStaticStyleParams(gmapJson: Record<string, any>[]) {
    function isColor(value: string) {
      return /^#[0-9a-f]{6}$/i.test(value.toString());
    }
    function toColor(value: string) {
      return `0x${value.slice(1)}`;
    }

    function parse() {
      const currentItems: string[] = [];
      const separator = '|';

      currentItems.length = 0;

      for (let i = 0; i < gmapJson.length; i++) {
        const item = gmapJson[i];
        const hasFeature = Object.prototype.hasOwnProperty.call(item, 'featureType');
        const hasElement = Object.prototype.hasOwnProperty.call(item, 'elementType');

        const stylers = item.stylers;
        let target = '';
        let style = '';

        if (!hasFeature && !hasElement) {
          target = 'feature:all';
        } else {
          if (hasFeature) {
            target = `feature:${item.featureType}`;
          }
          if (hasElement) {
            target = target ? target + separator : '';
            target += `element:${item.elementType}`;
          }
        }

        for (let s = 0; s < stylers.length; s++) {
          const styleItem = stylers[s],
            key = Object.keys(styleItem)[0]; // there is only one per element

          style = style ? style + separator : '';
          style += `${key}:${isColor(styleItem[key]) ? toColor(styleItem[key]) : styleItem[key]}`;
        }

        currentItems.push(target + separator + style);
      }

      return currentItems;
    }

    return `&style=${parse().join('&style=')}`;
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45215727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档