표준 빌트인 객체인 Math는 수학적인 상수와 함수를 위한 프로퍼티와 메서드를 제공한다. Math는 생성자 함수가 아니기 때문에 Math는 정적 프로퍼티와 정적 메서드만 제공한다. Math 프로퍼티Math.PI원주율 PI값을 반환한다.Math.PI; // -> 3.141592653589793 Math 메서드Math.abs인수로 전달된 숫자의 절대값을 반환한다. 절대값은 반드시 0 도는 양수이어야 한다.Math.abs(-1); // -> 1Math.abs('-1'); // -> 1Math.abs(''); // -> 0Math.abs([]); // -> 0Math.abs(null); // -> 0Math.abs(undefined); // -> NaNM..
JavaScript
표준 빌트인 객체인 Number는 원시 타입인 숫자를 다룰 대 유용한 프로퍼티와 메서드를 제공한다. 1. Number 생성자 함수생성자 함수 객체인 Number를 new 연산자와 함께 호출해 Number 인스턴스를 생성할 수 있으며, [[NumberData]] 내부 슬릇에 0을 할당한 Number 래퍼 객체를 생성한다.const numObj = new Number();console.log(numObj); // Number {[[PrimitiveValue]]: 0} 생성자 함수에 인수로 숫자를 전달하게 되면 인수로 전달받은 숫자를 할당한 Number 래퍼 객체를 생성한다.const numObj = new Number(10);console.log(numObj); // Number {[[PrimitiveVal..
1. 배열이란?배열은 여러 개의 값을 순차적으로 나열한 자료구조이다. 배열 안에는 요소들을 저장할 수 있으며, 요소들의 위치인 인덱스를 갖는다. 배열의 길이 length 프로퍼티를 갖는다. 2. JS 배열은 배열이 아니다자료구조에서의 배열은 동일한 크기의 메모리 공간이 빈틈없이 연속적으로 나열된 자료구조이다. 이라한 배열을 밀집 배열이라 한다. JS의 배열은 일반적인 배열의 동작을 흉내 낸 특수한 객체다. JS에서는 배열이라는 타입이 없으며 JS에서의 배열은 객체 타입이며 다른 객체와 달리 length 프로퍼티가 있다. // "16.2. 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체" 참고console.log(Object.getOwnPropertyDescriptors([1, 2, 3]));/*{ '0'..
1. 함수의 구분ES6 이전까지 JS의 함수는 구분없이 다양한 목적으로 사용되었다. 일반적인 함수, new 연산자와 함께 생성자 함수, 객체에 바인딩되어 메서드로 호출할 수 있다. 이러한 사용법은 편리해 보이지만 실수를 유발할 수 있으며 성능적으로도 손해였다.var foo = function () { return 1;};// 일반적인 함수로서 호출foo(); // -> 1// 생성자 함수로서 호출new foo(); // -> foo {}// 메서드로서 호출var obj = { foo: foo };obj.foo(); // -> 1 ES6 이전의 모든 함수는 일반 함수로서 호출할 수 있는 것은 물론 생성자 함수로서 호출할 수 있다. // 프로퍼티 f에 바인딩된 함수는 callable이며 constructo..
6. 클래스의 인스턴스 생성 과정new 연산자와 함께 클래스를 호출하며 클래스의 내부 메서드 [[Construct]](constructor)가 호출된다. 1. 인스턴스 생성과 this 바인딩new 연산자와 함깨 클래스를 호출하며 constructor의 내부 코드가 실행되기 전에 암묵적으로 빈 객체를 생성하며 이 빈 객체가 클래스가 생성한 인스턴스이다. 이때 클래스가 생성한 인스턴스의 프로토타입으로 클래스의 prototype 프로퍼티가 가리키는 객체가 설정되며 인스턴스는 this에 바인딩된다. 따라서 constructor 내부의 this는 클래스가 생성한 인스턴스를 가리킨다. 2. 인스턴스 초기화 constructor의 내부 코드가 실행되어 this에 바인딩되어 있는 인스턴스에 프로퍼티를 추가하고 cons..
JS의 클래스JS는 프로토타입 기반 객체지향 언어다. 다른 객체지향 언어와의 차이점은 있지만 JS는 강력한 객체지향 프로그래밍 능력을 갖고있다. 특히 JS는 클래스 없이 객체지향 프로그래밍을 구현할 수 있는 프로토타입 기반 객체지향 언어이다.// ES5 생성자 함수var Person = (function () { // 생성자 함수 function Person(name) { this.name = name; } // 프로토타입 메서드 Person.prototype.sayHi = function () { console.log('Hi! My name is ' + this.name); }; // 생성자 함수 반환 return Person;}());// 인스턴스 생성var me = new ..