javascript 12

[JavaScript] 함수와 일급 객체

일급 객체무명의 리터럴로 생성 가능 (런타임에 생성 가능)변수나 자료구조에 저장 가능함수의 매개변수에 전달 가능함수의 반환값으로 사용 가능→ JS의 함수는 위의 조건을 모두 만족하여 함수형 프로그래밍을 가능하게 하는 자바스크립트의 장점 중 하나함수 객체의 프로퍼티arguments 프로퍼티함수 호출 시 전달된 인수(argument)들의 정보를 담고 있는 순회 가능한 유사 배열 객체로 함수 외부에서 참조 불가능매개변수 개수보다 인수 적게 전달했을 경우 매개변수 undefined으로 초기화 상태 유지매개변수 개수보다 인수 더 많이 전달한 경우 초과된 인수 무시초과되거나 적게됐을 때 인수가 버려지는 것이 아닌 암묵적으로 arguments 객체의 프로퍼티로 보관자바스크립트 내에 함수 호출될 때 인수 개수에 따라 ..

[JavaScript] 생성자 함수에 의한 객체 생성

Object 생성자 함수new 연산자와 함께 Object 생성자 함수를 호출하면 빈 객체를 생성하여 반환하며, 이후 프로퍼티 또는 메서드를 추가하여 객체를 완성할 수 있다.생성자 함수란 new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수라고 하며 이에 의해 생성된 객체를 인스턴스라고 함Object, String, Number, Boolean, Function, Array, Data, RegExp, Promise 등의 빌트인 생성자 함수 제공const person = new Object(); // 빈 객체 생성// 프로퍼티 추가person.name = 'Lee';person.sayHello = function () { console.log('Hi! My name is ' + this.name)..

[JavaScript] 전역변수의 문제점

변수의 생명 주기변수는 자신이 선언된 위치에서 생성되고 소멸변수 단위 ‘호이스팅’자바스크립트 고유의 특징으로 변수 선언이 스코프의 선두로 끌어 올려진 것처럼 동작호이스팅은 스코프 단위로 동작변수별 생명 주기지역 변수함수 내부 지역변수의 생명 주기는 함수 생명주기와 동일전역 변수전역 변수는 반환문을 사용할 수 없어서 실행할 문이 없을 때 종료되므로 애플리케이션 생명주기와 동일 💡(참고) 브라우저 환경전역 객체는 window로 브라우저 환경에서 var 키워드는 window의 프로퍼티로 웹페이지를 닫기 전까지 유효→ var 키워드로 선언한 전역 변수의 생명 주기 = 전역 객체의 생명 주기 전역 변수의 문제점암묵적 결합모든 코드가 전역 변수를 참조하고 변경을 허용 → 코드 가독성 나빠지고 의도치 않은 상태 변..

[JavaScript] 객체 리터럴

객체란?자바스크립트는 개체 기반의 프로그래밍 언어이면 자바스크립트를 구성하는 거의 모든 것이 객체 (원시 값 제외 나머지)객체 타입은 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조객체는 변경 가능한 값객체는 0개 이상의 프로퍼티(키와 값으로 구성)와 메서드(함수가 프로퍼티 값으로 사용되는 경우)로 구성된 집합객체 리터럴에 의한 객체 생성자바스크립트는 프로토 타입 기반 객체지향 언어로서 클래스 기반 객체지향 언어(C++, Java)와 달리 다양한 객체 생성방법을 지원객체 리터럴 : 객체를 생성하기 위해 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용하여 값을 생성하는 표기법중괄호 {…} 내에 0개 이상의 프로퍼티를 정의, 미정의 시 빈 객체 생성중괄호는 코드 블록을 의미하지 않기 때문에..

[JavaScript] 타입 변환과 단축 평가

타입 변환개발자가 의도적으로 값의 타입을 변환하는 것은 명시적 타입 변환 또는 타입 캐스팅이라 한다.var x = 10;lvar str = x.toString();개발자의 의도와는 상관없이 표현식을 평가하는 도중에 자바스크립트 엔진에 의해 암묵적으로 타입이 자동으로 변화는 되는 것을 암묵적 타입 변화 또는 타입 강제 변환이라 한다.var x = 10;var str = x + '';다만 기존 원시값은 변경 불가능한 값으로 변경할 수 없으므로 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것을 의미한다.암묵적 타입 변환자바스크립트는 가급적 에러를 발생시키지 않도록 암묵적 타입 변환을 통해 표현식을 평가한다.문자열 타입으로 변환자바스크립트 엔진은 문자열 연결 연산자 표현식을 평가하기 위해 문자..

[JavaScript] 제어문

제어문제어문을 사용하면 코드의 실행 흐름을 인위적으로 제어할 수 있으나 가독성을 해치는 단점이 있다. forEach, map, filter, reduce와 같은 고차함수를 사용한 함수형 프로그래밍 기법에서 제어문 사용을 억제하여 복잡성을 해결하려고 노력한다.블록문블록문은 0개 이상의 문을 중괄호로 묶은 것으로 자바스크립트는 블록문을 하나의 실행 단위로 취급한다.블록문은 단독 사용할 수 있으나 일반적으로 제어문이나 함수를 정의할 때 사용하는 것이 일반적이다.자바스크립트 문에서 세미콜론(;)을 붙이는 것이 일반적이나 블록문은 자체 종결성을 갖기 때문에 세미콜론을 붙이지 않는다.// 블록문{ var foo = 10;}// 제어문var x = 1;if (x 조건문주어진 조건식의 평가 결과에 따라 코드 블록..

[JavaScript] 연산자

연산자는 하나 이상의 표현식을 대상으로 산술, 할당, 비교, 논리, 타입, 지수 연산 등을 수행하여 하나의 값을 만들고 이 때 연산의 대상을 피연산자로 함산술 연산자피연산자를 대상으로 수학적 계산을 수행해 새로운 숫자 값을 만들고 산술 연산이 불가능한 경우 NaN을 반환이항 산술 연산자2개의 피연산자를 산술 연한하여 숫자 값을 만드는데, 피연산자의 값이 바뀌는 경우가 없고 언제나 새로운 값을 만든다.+ : 덧셈- : 뺄셈* : 곱셈/ : 나눗셈% : 나머지단항 산술 연산자1개의 피연산자를 산술 연산하여 숫자 값을 만든다.++ : 증가 (부수효과 존재)-- : 감소 (부수효과 존재)+ : 어떤 효과도 없고 음수를 양수로 반전하지도 않음- : 양수를 음수로, 음수를 양수로 반전한 값을 변환증가/감소(++ /..

[JavaScript] 데이터 타입

데이터 타입 종류원시 타입숫자 타입숫자 타입의 값은 배정밀도 64비트 부동소수점 형식의 2진수로 저장되며, 모든 수를 실수 처리하고 정수만 표현하기 위한 데이터 타입이 별도 존재하지 않음특별 값 표현 가능Infinity : 양의 무한대-Infinity : 음의 무한대NaN : 산술 연간 불가(not-a-number)※ 대소문자 구분 필수문자열 타입텍스트 데이터를 나타내는 데 사용되며 문자열은 0개 이상 16비트 유니코드(UTF-16)의 집합으로 전 세계 대부분 문자 표현 가능문자열은 작은따옴표(가장 일반적인 표기법), 큰따옴표, 백틱으로 택스트로 감싸서 사용 (키워드나 식별자 같은 토큰 구분을 위해 사용)원시 타입이며, 변경 불가능한 값으로 문자열 생성되면 변경 불가능템플릿 리터럴새로운 문자열 표기법으로..

[JavaScript] 표현식과 문

값값은 식(표현식)이 평가되어 생성된 결과로 모든 값은 데이터 타입을 가지며 메모리에 2진수(비트)로 나열로 저장된다.값 생성리터럴사람이 이해할 수 있는 문자(아라비아 숫자, 알파벳, 한글 등) 또는 약속된 기호(’’, “”, ., [], {}, // 등)를 사용해 값을 생성하는 표기법리터럴예시비고정수 리터럴100부동소수점 리터럴10.52진수 리터럴0b01000010b로 시작8진수 리터럴0o1010o로 시작(ES6 도입)16진수 리터럴0x410x로 시작(ES6 도입)문자열 리터럴'Hello’”World”불리언 리터럴truefalsenull 리터럴nullundefined 리터럴undefined객체 리터럴{ name : ‘Lee’, address : ‘Seoul’ }배열 리터럴[ 1, 2, 3 ]함수 리터럴..

[JavaScript] 변수

변수의 정의 및 필요성변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념이다.자바스크립트 엔진이 위 자바스크립트 코드를 계산하려면 기호(리터럴, 연산자) 의미, 표현식 의미 해석(파싱) 가능해야 한다컴퓨터는 CPU 사용해서 연산, 메모리 사용하여 데이터 기억하는데 메모리는 데이터(2진수로 처리)를 저장할 수 있는 메모리 셀의 집합체로 셀 하나 크기는 1바이트이고 1바이트 단위로 저장 및 읽기를 한다.각 셀은 고유의 메모리 주소를 갖는데 이 주소는 메모리 공간의 위치를 나타내 메모리 크기만큼 정수로 표현된다.연산 결과를 메모리 주소를 통해 값에 직접 접근할 경우 치명적 오류를 발생시킬 가능성이 매우 높으므로 자바스크립트는 개발자의 직접적인 메모리 제어를 허용하지 않는다.그 결과 기억하고 싶은 값을..