識別子「場所」は既に宣言されています行方不明?JavascriptをES6非構造は、私は、オブジェクトの単純な配列を持っているし、最初の要素のlocation属性を取得したい
答えて
グローバル変数location
を定数として再定義することはできません。 let [{location}] = companies
を使用した場合、エラーは発生しませんでしたが、値をwindow.location
に割り当ててページをリダイレクトしようとすると、間違った動作をしたことになります。
考えられる解決策:
- 変更(プロパティ名と一緒に)変数名
- ブロックでコードをラップ(私たちはES6を使用しているため、生命維持、この場合には必要ありません)
- あなたは
const companies = [
{name: 'Google',loc: 'Mountain View'},
{name: 'Facebook', loc: 'Menlo Park'},
{name: 'Uber', loc: 'San Francisco'}
];
const [{loc}] = companies;
console.log(loc);
// Block scope
{
const companies = [
{name: 'Google', location: 'Mountain View'},
{name: 'Facebook', location: 'Menlo Park'},
{name: 'Uber', location: 'San Francisco'}
];
const [{location}] = companies;
console.log(location);
}
// Variable name doesn't have to be the same as property
const [{ location: loca }] = [{location: 'Mountain View'}]
console.log(loca);
const companies = [
{ name: 'Google', location: 'Mountain View' },
{ name: 'Facebook', location: 'Menlo Park' },
{ name: 'Uber', location: 'San Francisco' }
];
console.log(companies[0].location);
ここでの問題は、あなたが関数内のコードをラップしていないということです。
IIFE(Immediately Invocated Function Expression)を使用する場合、同じコードが機能します。
あなたのコードが失敗する理由は、定数/変数名がすでに使用されている場合、同じスコープ内で定数を宣言できないためです。
const
の代わりにvar
を使用しましたが、それはwindow.location
に割り当てられ、効果的にページをリロードし、そのURLが存在しないため、404ページになります。
グローバル名空間の汚染や修正が困難な厄介なバグを防ぐために、コードを常にIIFEで記述する必要があります。いっそ
(() => { // ES2015 IIFE
"use strict";
const companies = [
{ name: 'Google', location: 'Mountain View' },
{ name: 'Facebook', location: 'Menlo Park' },
{ name: 'Uber', location: 'San Francisco' }
];
const [{ location }] = companies;
console.log(location);
})();
または::
は、ここで同じ生命維持(追加strictモード)とのコードだ
{ // ES2015 block
"use strict";
const companies = [
{ name: 'Google', location: 'Mountain View' },
{ name: 'Facebook', location: 'Menlo Park' },
{ name: 'Uber', location: 'San Francisco' }
];
const [{ location }] = companies;
console.log(location);
};
のTh ES2015ブロックの電子の使用は、すべてのブラウザがまだES2015構文をサポートしているわけではないことを覚えて、常に、あなたはまた、
のみlet
とconst
を使用して(とvar
を使用していない)ことがありますことを考えると、グローバルスコープを汚染しません。したがって、コードはBabel JSまたは同様のツールを使用してトランスバイルされなければなりません。
location
は既にグローバルスコープでwindow.location
と宣言されているためです。
これを回避するには、このコードをローカルスコープ、つまりブロックで実行しないでください。これはES6ですが、IIFEはES5の残しです。
{
...
const [{ location }] = companies;
}
典型的なES6の使用はモジュラー環境です。現在のスコープがCommonJSまたはES6モジュールであることを考慮すると、問題は決して現れません。
ES2015ブロックスコープ内の 'var'は、とにかくグローバルスコープを汚染することに注意してください'const'と' let'だけを使うようにしました – Zorgatone
@Zorgatoneこれは正しいです。一般的には、 'var'を使用しない方が良い方法です。なぜなら、それが解決するよりも多くの問題を作り出すからです。この理由から、ESLintには 'no-var'ルールがあります。 – estus
私はちょうどそのことを書き留めるようにコメントしました。実際、ES6では 'const'と' let'だけを使うのが良い方法です。しかし、グループ内で作業するときや、他のソースから 'var'を含まないことをチェックせずにコードをコピーして貼り付けるときは注意してください。同じ変数が複数回宣言されていない場合は' let'と置き換えてください – Zorgatone
- 1. 私は、単純な構造体持っている構造体
- 2. は、私は非常に単純なオブジェクトを持っている
- 3. あなたは、私は、次のコード(ES6スプレッド属性)を持っている
- 4. 属性値によって要素の子を取得し、私はDIV表すjQueryオブジェクト持って
- 5. WebPACKのは、私は私のJSファイルのための単純なファイル構造を持っているJSファイル
- 6. ES6は、私はオブジェクトの配列を持つ新しいキー
- 7. XSL/XML属性を取得しています。私は属性のリストがあり、単純なxmlファイルを持っている
- 8. Jsoupを使用して属性を持たない要素を取得する
- 9. 属性を持たない要素のコレクションを取得する方法は?
- 10. Dockerfileは、私は次のような構造を持つデッド単純なプロジェクトを持っているADD
- 11. PHP単純なHTML DOMパーサー - 要素のハイフネーションされた属性値を取得
- 12. は、構造体のchar型の配列を初期化しようとしているが、私はこのような構造体持っている何か
- 13. 構造体の配列から要素配列を取得
- 14. Laravel - だけゼロは私は1つの属性を持つ単純な車のモデルを持っているデータベース
- 15. JQuery/Javascriptを使用した単純なXMLからの属性値の取得
- 16. は...私はjQueryの配列要素についての素朴な疑問を持っている配列
- 17. オブジェクトとして格納されている配列の最初の要素のアドレスを取得する
- 18. は私が構造を持っている単一のフィールドで
- 19. JavaScriptは、私は次のコードを持っている属性
- 20. 私はオブジェクトの配列を持っています。リストビューにその要素を表示したい
- 21. は、私はこの非常に単純なコードを持っているポインタ
- 22. アウレリアの観察者が、私はこのように単純化したカスタムデータグリッド要素持って配列
- 23. 追加データ属性とその値は、私が行くのJavaScriptスニペットを持っている純粋なJavaScriptの
- 24. のXml LINQのクエリ(属性によって要素を取得し、属性値)
- 25. クラスxxxxxの最初の要素の `rel`属性値を取得します。
- 26. は、私は次の配列構造を持っている価値が
- 27. 私は、リストの最後の要素を取得したい、F#
- 28. JsonIgnorePropertiesは、私は、次の単純なクラスを持っている
- 29. は、私はこの単純なコードを持っているリンク
- 30. ES6 /:オブジェクトが他の部分と構造化代入 - 私が持っている
"グローバル変数Xを再定義することはできません"という文を明確にすると、一般的には同じスコープの定数にのみ適用されます。 – Zorgatone
私はあなたが意味するものを得ることはできませんが、より多くの 'var'の同じ宣言を書くことができます。私が言ったことで何が間違っていますか、そしてどのようなコードがあなたにそのエラーを与えていますか? OPは、 '会社'変数ではなく、 '場所'変数に問題があります。 – Zorgatone
よろしくお願いします。コードを追加しました。私は最初にそれを読むことができます – Zorgatone