자바 스크립트 기본 값과 개체의 차이점은 무엇입니까?

자바 스크립트에는 기본 값과 객체라는 두 가지 유형의 데이터가 있습니다. 제대로 처리 할 수 ​​있도록 그 차이를 아는 것이 중요합니다.

이 도움말에서는 자바 스크립트 기본 값과 개체의 차이점을 살펴 보겠습니다.

차이점은 무엇입니까?

자바 스크립트에서 기본 값은 undefined , null , boolean , number , <유형의 항목입니다. code> string 및 symbol .

그 밖의 모든 것은 객체입니다.

통과 및 배정

기본 값은 객체와 동일하게 취급됩니다. 그러나 그들 사이에는 약간의 차이가 있습니다.

기본 값은 값으로 전달됩니다. 변수에 할당되고 값을 복사 한 다음 해당 작업을 수행하여 함수에 전달됩니다.

비교

비교 될 때 가치를 기준으로 비교됩니다. 즉, 내용이 비교됩니다.

객체는 원시 값과 다른 여러 속성으로 구성되며 값으로 기능합니다.

참조로 전달됩니다. 따라서 전달되기 전에 사본이 만들어지지 않습니다.

비교 될 때 참조가 비교됩니다. 즉, 내용이 같지만 변수 나 상수가 다르더라도 동일하다고 간주되지 않습니다.

예를 들어 다음과 같은 경우

내용이 동일하더라도 메모리에서 동일한 개체를 참조하지 않기 때문에 false 가 기록됩니다.

반면 :

위의 console.log foo 가 자신과 동일한 참조를 갖기 때문에 true 를 기록합니다.

또한 다음과 같이 foo bar 에 할당하는 경우 :

console.log 에서도 true 를 얻습니다.

변동성

기본 값은 변경할 수 없습니다. 값을 변경하기위한 작업을 할 수 없습니다.

예를 들어 엄격 모드에서 문자열의 length 속성을 ​​설정하려고하면 오류가 발생합니다.

그러나 이것은 배열로 할 수 있습니다 :

[1] 로 잘린 arr 배열을 가져옵니다.

배열 인 객체가 변경 가능하기 때문입니다. 기본적으로 속성을 변경할 수 있습니다.

그러나 개별 속성 설명자를 쓰기 불가능으로 설정하거나 Object.freeze 메서드를 사용하여 해당 속성 또는 전체 개체를 변경 불가능하도록 설정할 수 있습니다. 개체 및 프로토 타입의 최상위 수준

예를 들어 다음과 같이 Object.freeze 를 사용할 수 있습니다.

그런 다음 엄격 모드에있을 때 다음 할당으로 인해 오류가 발생합니다.

‘Uncaught TypeError : Cannot assign to read-only property’a ‘of object‘# & lt; Object & gt;’’오류가 발생합니다.

또한 defineProperty 를 사용하여 다음과 같이 쓸 수없는 속성을 추가 할 수 있습니다.

그런 다음 a 속성을 ​​쓰기 불가능하게 만든 이후 이전과 동일한 오류가 발생합니다.

생성자로부터 생성 된 것은 무엇이든 객체입니다

new 키워드를 사용하여 항목을 만들 때마다 개체를 만듭니다. 이는 Boolean , String Number 생성자에도 적용됩니다.

예를 들어 다음과 같이 작성하는 경우 :

foo 는 객체입니다.

new String () new Number () 에서도 동일합니다.

다시 기본 값으로 변환하려면 valueOf 메서드를 사용하여 다시 기본 값으로 변환해야합니다.

예를 들어 다음 코드가있는 경우 :

첫 번째 console.log & # x27; boolean & # x27; 에서 & # x27; object & # x27; 가 기록됩니다. 두 번째.

프리미티브를 만들기 위해 생성자 함수를 사용하는 것에는 이점이 없으며 혼란을 더합니다. 따라서 리터럴 만 사용하거나 한 유형의 값에서 다른 유형의 값을 변환 할 때 팩토리 함수 Boolean , String Number .

예를 들어 다음과 같이 Number 를 사용하여 문자열을 숫자로 변환 할 수 있습니다.

그런 다음 console.log 에서 출력 된 & # x27; number & # x27; 를 얻습니다.

결론

자바 스크립트에서 기본 값과 개체의 차이점을 아는 것이 중요합니다.

매우 다릅니다. 프리미티브 값은 불변이며 참조를 통해 함수로 전달되고 값으로 비교되며 할당시 복사본이 만들어집니다.

반면에 객체는 변경 가능하고 참조로 전달되고 참조로 비교되며 다른 변수에 할당 할 때 사본이 만들어지지 않습니다.

혼란을 줄이려면 생성자가 항상 객체를 생성하므로 원시 값을 생성하는 데 리터럴과 팩토리 함수를 사용해야합니다.