const strObj = new String('Lee'); // String {"Lee"}
console.log(typeof strObj); // object
const numObj = new Number(123); // Number {123}
console.log(typeof numObj); // object
// 표준 빌트인 객체가 생성한 인스턴스의 프로토타입은 표준 빌트인 객체의 prototype 프로퍼티에 바인딩된 객체다.
console.log(Object.getPrototypeOf(strobj) === String.prototype); // true
// toFixed 같은 프로토타입 메서드를 사용할 수 있다.
const numberObj = new Number(1.5); // Number {1.5}
console.log(numberObj.toFixed()); // 2
const str = 'hello';
// 원시 타입인 문자열이 프로퍼티와 메서드를 갖고 있는 객체처럼 동작한다.
console.log(str.length); // 5
console.log(str.toUpperCase); // HELLO
bar = 2; // window.bar
console.log(window.bar); //2
빌트인 전역 함수 eval는 자바스크립트 코드를 나타내는 인수를 문자열로 받고 문자열 코드가 표현식이라면 런타임에 평가하여 값을 생성하고, 전달받은 인수가 표현식이 아닌 문이라면 문자열 코드를 런타임에 실행한다. eval 함수의 사용은 금지해야 한다.
isFinite 함수는 인수가 유한수라면 true를, 무한수이면 false를 반환한다. 숫자가 아닌 경우 숫자로 타입 변환 후 검사를 수행한다. 이때 인수가 NaN으로 평가되는 값이라면 false를 반환한다.
isFinite(0); // true
isFinite(2e64); // true
isFinite('10'); // true
isFinite(Infinity); // false
isNaN은 전달받은 인수가 NaN인지 검사하여 그 결과를 불리언 타입으로 반환한다.
parseFloat은 전달받은 문자열 인수를 부동 소수점 숫자, 실수로 해석하여 반환한다.
parseInt는 전달받은 문자열 인수를 정수로 해석하여 반환한다.
encodeURI 함수는 완전한 URI 를 문자열로 전달받아 이스케이프 처리를 위해 인코딩한다. 이스케이프 처리는 네트워크를 통해 정보를 공유할 때 어떤 시스템에서도 읽을 수 있는 아스키 문자 셋으로 변환하는 것이다. decodeURI 함수는 인코딩된 URI를 인수로 전달받아 이스케이프 처리 이전으로 디코딩한다.
암묵적 전역은 선언하지 않은 식별자를 window.변수 형태로 해석하여 전역 객체에 프로퍼티를 동적으로 생성하는 현상을 말한다. 이렇게 생성된 변수는 변수가 아니라 프로퍼티이기 때문에 delete 연산자로 삭제할 수 있다.
var x = 10;
function foo () {
y = 20; // window.y = 20;
}
foo();
// 선언하지 않은 식별자 y를 전역에서 참조할 수 있다.
console.log(x + y); // 30