const strObj = new String('Lee'); // String {"Lee"}
console.log(typeof strObj); // object
const numObj = new Number(123); // Number {123}
console.log(typeof numObj); // object
const boolObj = new Boolean(true); // Boolean {true}
console.log(typeof boolObj); // object
const func = new Function('x', 'return x * x'); // f anonymous(x)
console.log(typeof func); // function
const arr = new Array(1, 2, 3,); // (3) [1, 2, 3]
console.log(typeof arr); // object
const regExp = new RegExp(/ab+c/i); // /ab+c/i
console.log(typeof regExp); // object
const date = new Date();
console.log(typeof date); // object
const numObj = new Number(1.5); // Number {1.5}
// Number.prototype의 프로토타입 메서드
console.log(numObj.toFixed()); // 2
// Number의 정적 메서드
console.log(Number.isInteger(0.5)); // false
const strObj = new String('Lee'); // String {"lee"}
// String 생성자 함수를 통해 생성한 strObj 객체의 프로토타입은 String.prototype이다.
console.log(Object.getPrototypeof(strObj) === String.prototype); // true
const str = 'hello';
// 원시 타입인 문자열이 래퍼 객체인 String 인스턴스로 변환된다.
console.log(str.length); // 5
console.log(str.toUpperCase()); // HELLO
// 래퍼 객체로 프로퍼티에 접근하거나 메서드를 호출한 후, 다시 원시값으로 되돌린다.
console.log(typeof str); // string
const str = 'hello';
// 식별자 str은 암묵적으로 생성된 래퍼 객체를 가리킨다.
// 식별자 str의 값 'hello'는 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된다.
// 래퍼 객체에 name 프로퍼티가 동적 추가된다.
str.name = 'Lee';
// 식별자 str은 래퍼 객체의 [[StringData]]에 할당된 원시값을 다시 갖는다.
// 이때 생성된 래퍼 객체는 아무도 참조하지 않기 때문에, 가비지 컬렉션의 대상이 된다.
// 식별자 str의 값 'hello'는 새롭게 암묵적으로 생성한 래퍼 객체의 [[StringData]] 내부 슬롯에 할당된다.
// 새롭게 생성된 래퍼 객체에는 name 프로퍼티가 존재하지 않는다.
console.log(str.name); // undefined
// 식별자 str은 래퍼 객체의 [[StringData]]에 할당된 원시값을 다시 갖는다.
// 이때 생성된 래퍼 객체는 아무도 참조하지 않기 때문에, 가비지 컬렉션의 대상이 된다.
console.log(typeof str, str); // string hello
Infinity : 무한대를 나타내는 숫자값을 가짐.
console.log(window.Infinity === Infinity); // true;
// 양의 무한대
console.log(3/0); // Infinity
// 음의 무한대
console.log(-3/0); // -Infinity
// 숫자값임
console.log(typeof Infinity); // number
NaN : 숫자가 아님을 나타내는 숫자값. Number.NaN 프로퍼티와 같음.
console.log(window.NaN); // NaN
console.log(Number('xyz')); // NaN
console.log(1 * 'string'); // NaN
console.log(typeof NaN); // number
undefined : 원시 타입 undefined
console.log(window.undefined); // undefined
var foo;
console.log(foo); // undefined
console.log(typeof undefined); // undefined
eval : 자바스크립트 코드를 나타내는 문자열을 인수로 전달받는다. 문자열 코드가 표현식이라면, 문자열 코드를 런타임에 평가하여 값을 생성. 표현식이 아니라면, 런타임에 실행. 잘 사용하지 않음.
isFinite : 전달 받은 인수가 정상적인 유한수인지 검사. 유한수이면 true, 무한수면 false 반환.
isFinite(0); // true
isFinite(2e64); // true
isFinite('10'); // true
isFinite(null); // true
isFinite(Infinity); // false
isFinite(-Infinity); // false
isFinite(NaN); // false
isFinite('Hello'); // false
isFinite('2005/12/12'); // false
isNaN : 전달 받은 인수가 NaN인지 검사하여 그 결과를 불리언으로 반환.
isNaN(NaN); // true
isNaN(10); // false
isNaN('blabla'); // true
isNaN('10'); // false
isNaN(true); // false
isNaN(false); // false
isNaN(undefined); // true
isNaN({}); // true
parseFloat : 전달 받은 문자열 인수를 부동 소수점 숫자(실수)로 해석하여 반환
parseFloat('3.14'); // 3.14
parseFloat('10.00'); // 10
parseFloat('34 45 66'); // 34
parseFloat('40 years'); // 40
parseFloat('He was 40'); // NaN
parseFloat(' 60 '); // 60
parseInt : 전달 받은 문자열 인수를 정수로 해석하여 반환
parseInt('10'); // 10
parseInt('10.123'); // 10
// 2진수로 해석 -> 10진수 정수로 반환
parseInt('10', 2); // 2
// 8진수로 해석 -> 10진수 정수로 반환
parseInt('10', 8); // 8
// 16진수로 해석 -> 10진수 정수로 반환
parseInt('10', 16); // 16
encodeURI / decodeURI
encodeURIComponent / decodeURIComponent
console.log(x); // undefined 변수 호이스팅 o
console.log(y); // ReferenceError 변수 호이스팅 x
var x = 10; // 전역 변수
function foo() {
y = 20; // window.y = 20;
}
foo();
console.log(x + y); // 30