この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

instanceof (no-instanceof) の禁止

このルールは、instanceof の使用と、Array または Object プリミティブとの直接比較を排除することを目的としています。

フレームワークでは、セキュリティ上の理由で、コンポーネントのコードを異なる iframe またはワーカーで評価することがあります。その結果、コードが特定の状況になることがあります。そのため、instanceof の使用は避けることをお勧めします。

これはなぜでしょうか? スコープが異なると、実行環境が異なります。それはつまり、異なる組み込み、異なるグローバルオブジェクトやコンストラクタなどがあるということです。これにより、生成された結果は当初、非直観的に見えます。たとえば、[] instanceof window.parent.Arrayfalse を返します。これは、Array.prototype !== window.parent.Array と配列が前者から継承されるためです。

この問題は、スクリプトで複数の iframe またはウィンドウを処理し、関数を介してオブジェクトをコンテキスト間で渡すときに発生します。フレームワークのセキュリティインフラストラクチャはこれを自動的に行うため、実行されるコンテキストに関係なく一貫して動作するコードを作成する必要があります。

ルールの詳細

次のパターンは問題と見なされます。
1if (foo instanceof bar) {
2    // do something!
3}
4if (foo.prototype === Array) {
5    // do something
6}
7if (foo.prototype === Object) {
8    // do something else
9}
次のパターンは、組み込み JavaScript または Lightning コンポーネントユーティリティ関数を使用しており、代替策として推奨されます。
1if (Array.isArray(foo)) {
2    // do something
3}
4if ($A.util.isPlainObject(foo)) {
5    // do something else
6}

関連資料