Infinity
프로퍼티는 무한대를 나타내는 숫자값 Infinity
를 갖는다.// 전역 프로퍼티는 window를 생략하고 참조할 수 있다.
console.log(window.infinity === Infinity); // true
// 양의 무한대
console.log(3/0); Infinity
// 음의 무한대
console.log(-3/0); -Infinity
// Infinity는 숫자값이다.
console.log(typeof Infinity); // number
NaN
프로퍼티는 숫자가 아님을 나타내는 숫자값 NaN(Not a 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.undefiend); // undefiend
var foo;
console.log(foo); // undefined
console.log(typeof undefined) // undefined
eval
함수는 자바스크립트 코드를 나타내는 문자열을 인수로 전달받는다. 전달받은 문자열 코드가 표현식이라면 eval
함수는 문자열 코드를 런타임에 평가하여 값을 생성하고, 전달받은 인수가 표현식이 아닌 문이라면 문자열 코드를 런타임에 실행한다.// 표현식인 문
eval('1 + 2;'); // 3
// 표현식이 아닌 문
eval('var x = 5;') // undefiend
// eval 함수에 의해 런타임에 변수 선언문이 실행되어 x 변수가 선언되었다.
console.log(x); // 5
// 객체 리터럴은 반드시 괄호로 둘러싼다.
const o = eval('({ a: 1})');
console.log(o); // {a: 1}
// 함수 리터럴은 반드시 괄호로 둘러싼다.
const f = eval('(function() { return 1; })');
console.log(f()); // 1
eval('1 + 2; 3 + 4;'); // 7
isFinite
함수는 전달받은 인수가 정상적인 유한수인지 검사하여 유한수이면 true를 반환하고, 무한수이면 false를 반환한다.
전달받은 인수의 타입이 숫자가 아닌 경우, 숫자로 타입을 변환한 후 검사를 수행한다. 이때 인수가 NaN
으로 평가되는 값이라면 false를 반환한다.
// 인수가 유한수이면 true을 반환한다.
isFinite(0); // true
isFinite(2e64); // true
isFinite('10'); // true: '10' -> 10
isFinite(null); // true: null -> 0
// 인수가 무한수 또는 NaN으로 평가되는 값이라면 false를 반환한다.
isFinite(Infinity); // false
isFinite(-Infinity); // false
// 인수가 NaN으로 평가되는 값이라면 false를 반환한다.
isFinite(NaN); // false
isFinite('Hello'); // false
isFinite('2005/12/12'); // false
NaN
인지 검사하여 그 결과를 boolean
타입으로 반환한다. 전달받은 인수의 타입이 숫자가 아닌 경우 숫자로 타입을 변환한 후 검사를 수행한다.// 인수가 숫자일 경우
isNaN(NaN); // Not a Number(숫자가 아님)이기 때문에 true 반환
isNaN(10); // 숫자이기 때문에 false 반환
// 인수가 문자열일 경우
isNaN('blabla'); // true : 'blabla' -> NaN
isNaN('10'); // false : '10' -> 10
isNaN(10.12); // false : '10.12' -> 10.12
isNaN(''); // false : '' -> 0
isNaN(' '); // false : ' ' -> 0
// 인수가 불리언일 경우
isNaN(true); // false : true -> 1
isNaN(null); // false : null -> 0
// 인수가 undefined일 경우
isNaN(undefined); // true : undefiend -> NaN
// 인수가 객체일 경우
isNaN({}); // true : {} -> NaN
// 인수가 date일 경우
isNaN(new Date()); // false : new Date() -> Number
isNaN(new Date().toString()); // true : String -> NaN
parseFloat
함수는 전달받은 문자열 인수를 부동 소수점 숫자, 즉 실수로 해석하여 반환한다.//문자열을 실수로 해석하여 반환한다
parseFloat('3.14');
77- 3.14
parseFloat('10.08'); // 10
//공백으로 구보된 문자열은 첫 번째 문자열만 번환한다.
parseFloat('34 45 66'); // 34
parseFloat('40 years'); // 48
//첫 번째 문자열을 숫자로 변환할 수 없다면 NaN을 반환한다.
parseFloat('He was 48'); // NaN
//앞뒤 공매은 무시된다.
parseFloat(' 60 '); // 60
parseInt
함수는 전달받은 문자열을 특정 진수의 정수로 변환하여 반환한다.// 문자열을 정수로 해석하여 반환한다.
parseInt('10'); // 10
parseInt('10.123'); // 10
// 전달받은 인수가 문자열이 아니면 문자열로 변환한 다음 정수로 해석하여 반환한다.
parseInt(10); // 10
parseInt(10.123); // 10
두 번째 인수로 진법을 나타내는 기수(2 ~ 36)를 전달할 수 있으며, 기수를 지정하면 첫 번째 인수로 전달된 문자열을 해당 기수의 숫자로 해석하여 10진수로 반환한다.
기수를 생략하면 첫 번쩨 인수로 전달된 문자열을 10진수로 해석하여 반환한다.
// '10'을 10진수로 해석하고 그 결과를 10진수 정수로 반환한다.
parseInt('10'); // 10
// '10'을 2진수로 해석하고 그 결과를 10진수 정수로 반환한다.
parseInt('10', 2); // 2
// '10'을 8진수로 해석하고 그 결과를 10진수 정수로 반환한다.
parseInt('10', 8); // 8
toString()
메서드를 사용한다.// 문자열 '1001'을 2진수로 보고 2진수 문자열 '1001'을 10진수 정수로 변환한다.
parseInt('1001', 2); // 9
// 10진수인 숫자 9를 2진수 문자열로 다시 변환한다.
parseInt('1001', 2).toString(2); // '1001'