원시 값 🆚 객체
- 원시값의 종류 : 불리언, 숫자, 문자열, null, undefined
- 각 객체는 고유하며, 엄격히 말해 그 자신과만 일치함( 자바의 객체별 주소 개념과 일치)
원시 값
- 프로퍼티를 바꾸거나, 추가하거나, 제거할 수 없음( 항상 불변 )
- 원시 데이터형에 프로펕를 설정하거나 가져오면 암묵적으로 객체 래퍼를 생성함
“hello”.toUpperCase();
: String 객체 래퍼를 생성해서 메서드 호출함
var str = 'abc';
str.length = 1; // 의미 없음
str.foo = 3; // 의미 없음
str.foo
undefined
undefined 와 null
- undefined는 정보가 없음. 값이 없음 이라는 의미
참 같은 값, 거짓 같은 값
- 아래 값들은 다 false로 해석됨
- undefined, null
- 불리언: false
- 숫자 : -0, ,NaN
- 문자열 : ‘’
- Boolean() 함수는 매개변수를 불리언으로 변환해 반환함
숫자
- 자바스크립트의 숫자는
모두 부동소숫점형 숫자
임 - 64비트로 인코딩된 배정밀도의 부동 소수점 (double로 알려진) 숫자임
1 === 1.0
true
Number('xyz') // NaN
3 / 0 // Infinity
- NaN (’Not a Number’) : 에러 값임
- Infinity : 에러로 생긴 값일 때가 많음
심벌(Symbol)
- ES6에서 도입된 7번째 데이터 타입으로 변경 불가능한 원시 타입의 값임
- 심벌 값은 다른 값과 중복되지 않는 유일무이한 값이고 외부로 노출되지 않아 확인이 불가능함 ⇒ 주로 이름의 충돌 위험이 없는 유일한 프로퍼티 키를 만들기 위해 사용함
- 객체의 프로퍼티 키로 사용할 수 있는 값은 빈 문자열을 포함하는 모든 문자열 or 심벌 값임
const mySymbol = Symbol();
console.log(typeof mySymbol); // symbol
console.log(mySymbol); // Symbol()
Symbol 함수는 String, Number, Boolean 생성자 함수와는 달리 new 연산자와 함께 호출되지 않음. new 연산자와 함께 생성자 함수 or 클래스를 호출하면 객체(인스턴스)가 생성되지만 심벌 값은 변경 불가능한 원시 값임- 심벌은 중복되지 않는 상수 값을 생성하는 것은 물론 기존에 작성된 코드에 영향을 주지 않고 새로운 프로퍼티를 추가하기 위해, 즉 하위 호환성을 보장하기 위해 도입되었음
📝
Symbol 상세 내용객체
- 기본적으로 변경 가능함 ( 프로퍼티를 자유롭게 추가, 변경, 제거 가능)
용어 정의
- 값(value) : 표현식(expression)이 평가(evaluate)되어 생성된 결과
- 리터럴(literal) : 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법(notation)
- 표현식(expression) : 값으로 평가될 수 있는 문(statement). 즉, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조함
- 문(statement) : 프로그램을 구성하는 기본 단위이자 최소 실행 단위임