옵셔널 체이닝 정의되지 않은 객체의 프로퍼티(속성)에 접근할 떄 에러를 반환하지 않고 undefined를 할당하여 프로그램이 종료 되지 않고 남은 로직을 처리 할 수 있도록 하는 문법 기본 문법 아무런 프로퍼티도 정의되지 않은 빈 객체 선언 person 객체에 선언되지 않은 name.firstName프로퍼티 호출 시 에러 발생 //아무 프로퍼티도 정의 되지 않은 빈 객체 선언 const person = {} //person 객체에 선언되지 않은 name.firstName 프로퍼티에 접근시 에러발생 console.log( person.name.firstName) //?.옵셔널 체이닝 문법으로 왼쪽에 있는 객체를 평가함 console.log(person?.name?.firstName) 옵셔널 체이닝 문법 ?..
예제 25.05 클래스는 함수로 평가됨 프로토타입과 생성자 함수는 단독으로 존재할 수없고 언제나 쌍으로 전재함 class Person { } console.log(typeof Person); // function 예제 25.06 클래스는 클래스 정의 이전에 참조할 수 없음 console.log(Person); // ReferenceError: Cannot access 'Person' before initialization // 클래스 선언문 class Person { } 예제 25.07 클래스 선언문도 변수 선언, 함수정의와 같이 호이스팅 발생 클래스는 let,const키워드로 선언한 변수처럼 호이스팅됨 => TDZ에 접근했을때 RangeError 발생 const Person = ''; { // 호이스팅..
예제 25.01 Person 변수를 선언하고 즉시실행되는 IIFE함수 실행 생성자와 프로토타입 메서드를 캡슐화함 // ES5 생성자 함수 // Person변수 선언, 즉시 실행되는 함수인 IIFE, 함수는 생성자와 프로토타입 메서드를 캡슐화 var Person = (function () { // 생성자 함수 Person, name이라는 매개변수를 받아 새로 생성된 객체의 name 속성에 할당함 function Person(name, age) { this.name = name; this.age = age } // 프로토타입 메서드 // Person 생성자의 프로토타입 sayHi라는 메서드 추가 // 이 메서드는 콘솔에 메세지를 로깅하는데, 메세지 안에 name 속성이 포함됨 Person.prototype...
예제 28.01 const numObj = new Number(); console.log(numObj); // Number {[[PrimitiveValue]]: 0} 예제 28.02 const numObj = new Number(10); console.log(numObj); // Number {[[PrimitiveValue]]: 10} 예제 28.03 Number 생성자 함수의 인자로 숫자가 아닌 값을 전달하면 인자를 숫자형으로 강제 변환한다 [[NumberData]] 내부 슬롯에 변환된 숫자를 할당한 Number 래퍼 객체를 생성한다. 인자를 숫자로 변환할 수 없다면 NaN을 할당 //문자열 '10'을 인자로 전달하면 숫자 10으로 할당함 let numObj = new Number('10'); cons..