Object.hasOwnProperty() で ESLint の「no-prototype-builtins」エラーが発生します。どうすれば修正できますか? 質問する

Object.hasOwnProperty() で ESLint の「no-prototype-builtins」エラーが発生します。どうすれば修正できますか? 質問する

指定されたキーの i18n 文字列を取得するために、次のロジックを使用しています。

export function i18n(key) {
  if (entries.hasOwnProperty(key)) {
    return entries[key];
  } else if (typeof (Canadarm) !== 'undefined') {
    try {
      throw Error();
    } catch (e) {
      Canadarm.error(entries['dataBuildI18nString'] + key, e);
    }
  }
  return entries[key];
}

プロジェクトで ESLint を使用しています。次のエラーが発生します:

ターゲット オブジェクトから Object.prototype メソッド 'hasOwnProperty' にアクセスしないでください。これは ' no-prototype-builtins ' エラーです。

このエラーを解決するには、コードをどのように変更すればよいですか? このルールを無効にしたくありません。

ベストアンサー1

以下の方法でアクセスできますObject.prototype:

Object.prototype.hasOwnProperty.call(obj, prop);

それはより安全なはずです。

  • すべてのオブジェクトが継承するわけではないObject.prototype
  • から継承するオブジェクトの場合でもObject.prototypehasOwnPropertyメソッドが他のものによって隠される可能性があります。

もちろん、上記のコードは、

  • グローバルはObjectシャドウ化または再定義されていない
  • ネイティブはObject.prototype.hasOwnProperty再定義されていない
  • call所有物件は追加されていませんObject.prototype.hasOwnProperty
  • ネイティブはFunction.prototype.call再定義されていない

これらのいずれかが当てはまらない場合、より安全な方法でコーディングしようとすると、コードが壊れてしまう可能性があります。

必要のないもう一つのアプローチcall

!!Object.getOwnPropertyDescriptor(obj, prop);

おすすめ記事