방금 {....0}
친구의 코드에서 찾았 습니다. 콘솔에서 평가하면 {}
(빈 개체)가 반환 됩니다.
왜 그런 겁니까? JavaScript에서 4 개의 점의 의미는 무엇입니까?
방금 {....0}
친구의 코드에서 찾았 습니다. 콘솔에서 평가하면 {}
(빈 개체)가 반환 됩니다.
왜 그런 겁니까? JavaScript에서 4 개의 점의 의미는 무엇입니까?
답변:
4 개의 점은 실제로 의미가 없습니다. ...
는 IS 확산 연산자 및 .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
더 유용한 정보
객체 리터럴에있는 세 개의 점은 스프레드 속성입니다 . 예 :
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
길을 잃을 것입니다.
간단히 말해서 {...}
자바 스크립트의 확산 연산자는 한 객체 / 배열을 다른 객체 / 배열로 확장합니다.
따라서 babelifier가 서로 확장하려고 할 때 배열 또는 객체를 확장하려고하는지 식별해야합니다.
의 경우 array
요소를 반복합니다.
의 경우 object
키를 반복합니다.
이 시나리오에서 babelyfier 는 누락 된 number
Object를 확인하여 키를 추출하려고 시도 하므로 빈 Object를 반환합니다.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"}
배열 측면에서 인덱스를 키로 사용하므로 두 요소 arr1
모두 다른 배열에서 동일한 인덱스를 갖기 때문에 '1'의 요소 를 '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} // {}
결론적으로 스프레드 연산자와 함께 사용할 때 키-값 쌍의 형태로 처리 할 수있는 데이터 유형 {...}
은 비어 있지 않은 객체를 반환합니다. 그렇지 않으면 빈 객체를 반환합니다.{}