이안의 평일코딩

20장 strict mode & 21장 빌트인 객체 본문

Study/JS Diver

20장 strict mode & 21장 빌트인 객체

이안92 2021. 7. 7. 11:43
반응형

20장

 

p.314

- 잠재적인 오류를 발생시키기 어려운 개발 환경을 만들기 위한 해결책으로 ES5부터 strict mode(엄격 모드)가 추가되었다. 린트 도구는 strict mode가 제한하는 오류는 물론 코딩 컨벤션을 설정 파일 형태로 정의하고 강제할 수 있기 때문에 더욱 강력한 효과를 얻을 수 있다. 따라서 strict mode보다 린트 도구의 사용을 선호한다.

 

- strict mode를 적용하려면 전역의 선두 또는 함수 몸체의 선두에 'user strict';를 추가한다. 전역에 strict mode를 적용하는 것과 함수 단위로 strict mode를 적용하는 것은 피해야한다. 따라서 strict mode는 즉시 실행 함수로 감싼 스크립트 단위로 적용하는 것이 바람직하다.

 

- strict mode가 발생시키는 에러는 선언하지 않은 변수를 참조하는 암묵적 전역과 delete 연산자로 변수, 함수, 매개변수의 삭제 그리고 중복된 매개변수 이름을 사용하거나 with 문을 사용하면 에러가 발생한다.

 

21장

 

p.320

- 자바스크립트 객체는 표준 빌트인 객체, 호스트 객체, 사용자 정의 객체 크게 3개의 객체로 분류할 수 있다. 

 

p.321

- 자바스크립트는 40여 개의 표준 빌트인 객체를 제공한다. Math, Reflect, JSON을 제외한 표준 빌트인 객체는 모두 인스턴스를 생성할 수 있는 생성자 함수 객체다. 생성자 함수 객체인 표준 빌트인 객체는 프로토타입 메서드와 정적 메서드를 제공하고 생성자 함수 객체가 아닌 표준 빌트인 객체는 정적 메서드만 제공한다.

 

p.323

- 원시값은 객체가 아니므로 프로퍼티나 메서드를 가질 수 없는데도 원시값인 문자열이 마치 객체처럼 동작한다. 마침표 표기법(또는 대괄호 표기법)으로 접근하면 자바스크립트 엔진이 일시적으로 원시값을 연관된 객체로 변환해 주기 때문이다. 이처럼 문자열, 숫자, 불리언 값에 대해 객체처럼 접근하면 생성되는 임시 객체를 래퍼 객체(wrapper object)라 한다.

const str = 'hi';

// 원시 타입인 문자열이 래퍼 객체인 String 인스턴스로 변환된다.
console.log(str.length); // 2
console.log(str.toUpperCase()); // HI

// 래퍼 객체로 프로퍼티에 접근하거나 메서드를 호출한 후, 다시 원시값으로 되돌린다.
console.log(typeof str); // string

p.328

- 빌트인 전역 프로퍼티(built-in global property)는 전역 객체의 프로퍼티를 의미한다. 주로 애플리케이션 전역에서 사용하는 값을 제공한다. Infinity, NaN, undefined.

 

p.329

- 빌트인 전역 함수(built-in global function)는 애플리케이션 전역에서 호출할 수 있는 빌트인 함수로서 전역 객체의 메서드다. eval, isNaN, parseFloat, parseInt, encodeURI/decodeURI

 

p.333

- parseInt 전달받은 문자열 인수를 정수(integer)로 해석(parsing)하여 반환한다.

/*
전달받은 문자열 인수를 정수로 해석하여 반환한다.
@param {string} string - 변환 대상 값
@param {number} [radix] - 진법을 나타내는 기수(2 ~ 36, 기본값 10)
@returns {number} 변환 결과
*/

parseInt(string, radix);

 

p.334

parseInt('10');     // 10
parseInt('10.123'); // 10
parseInt(10);       // 10
parseInt(10.123);   // 10

// '10'을 2진수로 해석하고 그 결과를 10진수 정수로 반환한다.
parseInt('10', 2);  // 2

 

- 10진수 숫자를 해당 기수의 문자열로 변환하여 반환하고 싶을 때는 Number.prototype.toString메서드를 사용한다.

const x = 15;

// 10진수 15를 2진수로 변환하여 그 결과를 문자열로 반환한다.
x.toString(2); // 1111

// 문자열 '1111'을 2진수로 해석하고 그 결과를 10진수 정수로 반환한다.
parseInt(x.toString(2), 2); // 15

 

p.336

// 'A'는 10진수로 해석할 수 없다.
parseInt('A0'); // NaN

// 공백으로 구분된 문자열은 첫 번째 문자열만 변환한다.
parseInt('34 45 66'); // 34
parseInt('40 years'); // 40

// 첫 번째 문자열을 숫자로 변환할 수 없다면 NaN을 반환한다.
parseInt('He was 40'); // NaN

// 앞뒤 공백은 무시된다.
parseInt(' 60 '); // 60

 

p.337

- encodeURI 함수는 완전한 URI(Uniform Resource Identifier)를 문자열로 전달받아 이스케이프 처리를 위해 인코딩한다. URI는 인터넷에 있는 자원을 나타내는 유일한 주소로 하위개념으로 URL, URN이 있다. 이스케이프 처리는 네트워크를 통해 정보를 공유할 때 어떤 시스템에서도 읽을 수 있는 아스키 문자 셋으로 변환하는 것이다. 

app.use(express.urlencoded({ extended: true }));

 

const uri = 'http://example.com?name=이웅모&job=programmer&teacher';

// encodeURI 함수는 완전한 URI를 전달받아 이스케이프 처리를 위해 인코딩한다.
const enc = encodeURI(uri);
console.log(enc);
// http://example.com?name=%EC%9D%B4%EC%9B%85%EB%AA%A8&job=programmer&teacher

// decodeURI 함수는 인코딩된 완전한 URI를 전달받아 이스케이프 처리 이전으로 디코딩한다.
const dec = decodeURI(enc);
console.log(dec);
// http://example.com?name=이웅모&job=programmer&teacher

 

p.339

- encodeURIComponent 함수는 인수로 전달된 문자열을 URI의 구성요소인 쿼리 스트링의 일부로 간주하기 때문에 쿼리 스트링 구분자로 사용되는 =, ?, &까지 인코딩한다.

 

 

 

 

반응형
Comments