bugfix> javascript > 投稿

これがJSに有効な理由:

const a = ['b', 'c'];
a.d = 'e';
a.x = { y: 'z' };
console.log(a); // ['b', 'c', d: 'e', x: { y: 'z' }]

しかし、これはそうではありません:

const a = ['b', 'c', d: 'e', x: { y: 'z' }];
console.log(a);

このような配列を1つのステップでどのように構築できますか?

回答 5 件
  • 配列リテラルとオブジェクトリテラルが混在しています。

    ['a', 'b']
    
    

    2つの文字列を含む長さ2の配列を作成する配列リテラルです。

    {a: 1, b: 2}
    
    

    2つのキーに2つの値を持つオブジェクトを作成するオブジェクトリテラルです。

    最初の例では、キーの下の追加の値を配列に追加します。これは、すべての配列もオブジェクトであるため可能です。これはリテラル経由ではできません(わかりません)。

  • JavaScript Array  は実際には「クラス」なので、配列のインスタンスは実際にはオブジェクトです。これも typeof [1 , 2 ,3] です  言う。

    プロパティを追加したり、既存のプロパティをオーバーライドするなど、JavaScriptオブジェクトでできる一般的なことはあります。たとえば、長さを好きなようにオーバーライドしたり、カスタムメソッドを追加したりします。

    var arr = [ 1, 2, 3, 4 ];
    arr.length = 100;
    arr.thirditem = function () {
        return this[3];
    }.bind(arr);
    console.log(arr.length);
    console.log(arr.thirditem());
    
    

    MDNからの読み取りに注意する必要があります。

    The JavaScript Array object is a global object that is used in the construction of arrays; which are high-level, list-like objects. [...]

    Syntax

    
    [element0, element1, ..., elementN]
    new Array(element0, element1[, ...[, elementN]])
    new Array(arrayLength)
    
    

    配列の初期化ルールは、上記の配列のJavaScript構文ルールに従う必要があるため、厳密に [ "comma", "separated", "values" ] の形式である必要があります  または、 new Array("comma", "separated", "values") を使用します  format(または new Array(length)  N値の配列だけが必要な場合はフォーマットしてください)。

  • 配列要素は配列プロパティではありません。角括弧で囲まれた0個以上の要素をリストすることで配列を宣言し、ドット表記でそのプロパティを宣言します。 これらは本質的に異なるものであるため、これを「ワンステップ」で行うことはできません。

  • オブジェクトをコンテナとして取得し、すべての配列値をインデックスに追加できます。配列値を反復するには、これらの値を Object.assign を使用して配列に割り当てることができます

    const a = { 0: 'b', 1: 'c', d: 'e', x: { y: 'z' } };
    console.log(a);
    console.log(Object.assign([], a)); // take the array values
    
    
    .as-console-wrapper { max-height: 100% !important; top: 0; }
    
    

  • あなたが提案しているのは、JavaScriptが次の構文を許可する可能性があるということです-

    var arr = [some: "someVal", other: "otherVal"];
    
    

    に等しいだろう

    var arr = [];
    arr.some = "someVal";
    arr.other = "otherVal";
    
    

    このようなアレイには、実世界でかなりの数のユースケースがありますか?

    言語には無限の機能セットが付属しているわけではなく、そのうちのいくつかは最終的に「破棄」されます。代わりに、機能は追加しました 言語に。

    言語への機能の追加は無料ではありません。それらは、設計、実装、およびテストする必要があります。

    どうやら、この構文を追加する価値はないと考えられました。

あなたの答え