{....0}
友達のコードで見つけました。コンソールでそれを評価すると、{}
(空のオブジェクト)が返されます。
何故ですか?JavaScriptでの4ドットの意味は何ですか?
回答:
4つのドットは実際には意味がありません。...
はスプレッド演算子であり、の.0
略です0.0
。
0(または任意の数)をオブジェクトに拡散すると、空のオブジェクトが生成されます{}
。したがって、。
Spreading 0 (or any number) yields an empty object
オブジェクト以外の場所に数値を広げると、必ずしもエラーがスローされます。たとえば、[... 0]はエラーをスローします。
Spreading 0 (or any number) in object literal yields an empty object
より多くの有用な情報が含まれています。..
オブジェクトリテラル内の3つのドットは、スプレッドプロパティです。例:
const a = { b: 1, c: 1 };
const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }
0の最後のドットは数値リテラルで.0
あり、と同じ0.0
です。したがって、これは:
{ ...(0.0) }
数値オブジェクトのすべてのプロパティをオブジェクトに拡散しますが、数値には(独自の)プロパティがないため、空のオブジェクトが返されます。
Function
(function x() {}), (x.k = 'v'), ({...x})// {k: 'v'}
が動作しませんNumber
(x = 10), (x.k = 'v'), ({...x}) // {}
x.k
、迷子になります。
簡単に言うと{...}
、javascriptのspread演算子は、あるオブジェクト/配列を別のオブジェクト/配列で拡張します。
したがって、バベリファイアが相互に拡張しようとする場合、配列またはオブジェクトのどちらを拡張しようとしているかを識別する必要があります。
の場合、array
要素を反復処理します。
の場合、object
キーを繰り返し処理します。
このシナリオでは、babelyfierは、欠落してnumber
いるオブジェクトをチェックすることにより、のキーを抽出しようとしています。own property call
number
ている、空のオブジェクトが返されます。
Spread演算子を{...}
使用すると、iterableを展開できます。これは、key-value
ペアの形式で定義できるデータ型を拡張できることを意味します。面ではObject
、我々はの面で、一方、値オブジェクトのプロパティとしてキーと値のペアを呼び出してのarrays
我々はそれの値として配列のキーと要素としてインデックスを考えることができます。
let obj = { a: 4, b: 1};
let obj2 = { ...obj, c: 2, d: 4}; // {a: 4, b: 1, c: 2, d: 4}
let arr1 = ['1', '2'];
let obj3 = { ...arr1, ...['3']}; // {0: "3", 1: "2"}
配列に関しては、インデックスをキーとして使用するため、ここでは、の要素「1」arr1
を「3」に置き換えます。これは、両方が異なる配列で同じインデックスを持っているためです。
文字列が広すぎると、演算子は空でないオブジェクトを返します。文字列は文字の配列であるため、文字列を配列として扱います。
let obj4 = {...'hi',...'hello'} // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'} // {0: "x" }
ただし、他のプリミティブデータ型では、空のオブジェクトが返されます
数字で
let obj6 = { ...0.0, ...55} // {}
ブール値付き
let obj7 = { ...true, ...false} // {}
結論として、spread演算子で使用するとキーと値のペアの形式で処理できるデータ型{...}
は、空でないオブジェクトを返します。それ以外の場合は、空のオブジェクトを返します。{}