이 두 문자열의 차이점 (JavaScript)
두 가지 방법으로 값이있는 문자열 데이터 유형 변수 를 만들려고했습니다 .
- 문자열 리터럴
- 새 키워드 사용
그러나 나에게는 둘 다 console.log의 표현이 다른 것 같습니다 . 누군가 2nd way가 문자열을 반환하지 않거나 어떻게 든 다른지 말해 줄 수 있습니까?
var str1 = "abc";
var str2 = new String("def");
console.log(str1);
console.log(str2);
예상 :
abc, def
산출:
답변
JavaScript에는 기본 유형과 객체라는 두 가지 주요 유형 범주가 있습니다.
typeof new String(); // "object"
typeof ''; // "string"
다음과 같은 변수에 기본 값을 할당하는 문 :
var str1 = "Hi";
JavaScript는 내부적으로 다음을 사용하여 변수를 만듭니다.
String("Hi")
new 키워드를 사용하면 다르게 작동하며 대신 객체를 반환합니다.
호출 new String(something)은 String 인스턴스 객체를 만듭니다.
결과는 console.log ()를 통해 동일하게 보입니다. 전달한 String 인스턴스에서 기본 문자열을 추출하기 때문입니다.
그래서 : 단순한 String ()은 문자열 프리미티브를 반환합니다. new String ( 'xyz')는 String 생성자에 의해 생성 된 객체를 반환합니다.
String 인스턴스를 명시 적으로 구성 할 필요는 거의 없습니다.
두 가지 다른 작업을하고 있습니다. 은 var str1 = "abc"당신에게 기본을 제공합니다. 는 동안 var str2 = new String("def");당신에게 문자열 객체를 제공합니다. 이 두 유형은 다르게 작동합니다.
String 객체를 사용하면 일련의 문자로 작업 할 수 있습니다. 자바 스크립트의 문자열 프리미티브 데이터 유형을 여러 도우미 메서드로 래핑합니다.
JavaScript는 문자열 프리미티브와 String 객체 사이를 자동으로 변환하므로 문자열 프리미티브에서 String 객체의 도우미 메서드를 호출 할 수 있습니다.
개체를 인쇄 할 때 종종 콘솔이 개체의 속성을 인쇄합니다.
기본 요소 인 경우 콘솔은 값을 인쇄합니다.
프리미티브는 박스형이 아니지만 생성자를 사용하여 문자열을 생성하면 문자열은 객체에 박스형이며 항상 속성을 갖습니다.
리터럴이면 .boxing이 발생하기 때문에 연산자 를 사용하여 문자열의 속성에 액세스 할 때만 속성을 가지지 만 그 후에도 추가 추가가없는 리터럴이므로 인쇄 할 때 "The cat is very grumpy"값만 인쇄하고 아무것도 인쇄하지 않습니다. 더. 프리미티브 리터럴은 항상 속성이있는 객체는 아니며 박스형 일 때만 객체입니다.