JavaScript: 두 판 사이의 차이

20번째 줄: 20번째 줄:


== 표준 ==
== 표준 ==
표준은 현재 ECMA에서 관리하며 저작권 문제를 피하기 위해 ECMAScript라고 공표한다.
{{틀:본문|ECMAScript}}
JavaScript의 표준은 ECMA에서 관리하고 있으며 [[ECMAScript]]라고 부른다.


최신 ECMAScript 표준의 버전은 ECMAScript 2019이다. ECMAScript 2015 이후로는 매년 새 표준이 발표되고 있다. 2015년에 6번째 판이 나왔고, 이후에는 연도를 이용해 버전을 표기하기로 결정되었다. 따라서 ECMAScript 2015는 ECMAScript 6과 같은 표준이다. 표준명을 줄여서 ES2019, ES6, ES7 같은 식으로 쓰기도 한다.
표준이 발표되어도 그 기능을 구현하는 건 브라우저 제조사들 마음대로라, 기능이 표준에 들어간지 한참 뒤에 구현하거나 표준에 없는 기능을 넣어놓거나 하는 일이 많다. 다만 메이저 브라우저 제조사들은 대부분 ES 표준 위원회에 참여하고 있기 때문에 되도록이면 표준에 맞추려고 노력은 하는 편이다. 아니면 자기네 독자 기능을 표준에 넣든지.
업데이트가 되고 있는 브라우저들은 대개 새 표준을 꾸준히 반영하고 있지만 [[인터넷 익스플로러]]는 보안 패치 이외의 업데이트가 되지 않기 때문에 이런 새 기능 사용에 제약을 받는 일이 많다. Babel과 같은 transpiler는 최신 표준 문법을 옛날 표준, 주로 ES5로 바꿔주어 IE와 같은 구식 브라우저에서 사용할 수 있게 해준다. 또한 아직 표준으로 확정되지 않은 제안 단계의 표준들을 미리 사용할 수 있도록 변경해주는 기능도 제공한다. 문법상 변경이 아닌 API 수준의 차이는Polyfill 라이브러리를 이용하면 새로 나온 함수나 객체 등을 이용할 수 있다.
=== ECMAScript6 기능 ===
=== ECMAScript6 기능 ===
==== let, const키워드 ====
==== let, const키워드 ====

2019년 11월 11일 (월) 03:08 판

JavaScript는 오늘날 월드 와이드 웹 환경에서 광범위하게 쓰이는 프로그래밍 언어이다.

Java하고는 문법이 조금 비슷해 보인다는 점을 빼면 전혀 다른 언어이다. 인도인도네시아 car와 carpet처럼 관련이 없다 #역사 참고.

역사

웹 브라우저넷스케이프 네비게이터 2.0의 스크립트 언어로 쓰기 위해 1995년부터 개발되었다. 당시 넷스케이프 사에서 일했고, 훗날 모질라 재단CTO로 재직하는 Brendan Eich가 10일 만에(......) 만들었다고 한다. JavaScript라는 이름이 된 것은 순전히 마케팅적인 이유로, 처음에는 Mocha, 그 다음에는 LiveScript라는 이름을 쓰다가 지금은 회사 째로 오라클에 먹힌 썬 마이크로시스템즈와 상표권 라이센스를 맺게 되면서[1] JavaScript라는 이름으로 발표하고 덤으로 문법까지 Java와 비슷하게 고쳐져 버렸다.

넷스케이프 네비게이터와 함께 JavaScript는 큰 성공을 거두었고, 당시 넷스케이프와 경쟁하던 인터넷 익스플로러도 JScript라는 이름으로 호환 엔진을 만들게 되었다. 이렇게 한동안 비슷한 듯 다른 두 개의 언어가 공존하는 상태가 지속되다가, 이 애매한 상태를 해소하기 위해 공동으로 Ecma 인터내셔널이라는 유럽의 표준화 단체에서 이 언어에 대한 표준화를 진행하게 되었다. 이때, 어쨌거나 JavaScript라는 이름을 쓰는 건 상표권 이슈가 있었으므로, 표준화 단체의 앞글자를 딴 ECMAScript라는 이름 공식적인 표준의 이름으로 쓰게 되었다. 따라서 형식적으로는 JavaScript는 ECMAScript 표준을 구현한 한 구현체의 이름이 된다. ECMAScript 표준을 따르는 다른 프로그래밍 언어로는 Adobe Flash에서 쓰이는 ActionScript가 있다.

특징

언어적으로, JavaScript는 동적 타입을 쓰며 프로토타입 기반 객체 지향 프로그래밍을 지원하는 절차형 언어이다.

절차형 언어임에도 불구하고 함수형 프로그래밍 언어들처럼 익명 함수와 클로져를 쓸 수 있는데, 이는 JavaScript가 처음 설계될 적에 Scheme이라는 LISP 사투리로부터 영향을 받았기 때문이다.[2] JavaScript에 영향을 준 또 다른 언어로는 Self가 있는데, 이것은 Smalltalk를 기반으로 클래스 대신 프로토타입 기반의 객체지향 시스템을 적용한 언어이다. 이는 JavaScript의 .prototype 프로퍼티를 사용하는 특이한 객체 모델의 바탕이 되었다.

원래 인터프리터를 쓸 것을 염두에 두고 디자인되었고 따라서 실행 성능도 보잘것없었다. 하지만 2000년대 후반부터 HTML5와 웹 애플리케이션이 크게 대두되기 시작하면서 구글 크롬V8, 파이어폭스SpiderMonkey, 사파리JavaScriptCore 등 여러 우수한 JavaScript 엔진들의 성능 경쟁이 일어났고, 그 덕에 지금은 인터프리트되는 언어 중에서는 상당히 성능이 좋은 편에 속한다.

태생이 웹 브라우저의 스크립트 언어였기에, 언어 자체의 표준 라이브러리보다는 웹 브라우저API에 의존하는 경향이 매우 강하다. 따라서 언어 자체의 표준안인 ECMAScript 표준 이상으로 W3C문서 객체 모델 표준, HTML5의 브라우저 API 표준 등에 강하게 영향을 받는다. V8 엔진을 활용한 서버측 JavaScript 구현인 Node.js가 히트하기 전에는 변변한 파일 입출력 API조차 제대로 합의된 게 없었을 정도.

표준

JavaScript의 표준은 ECMA에서 관리하고 있으며 ECMAScript라고 부른다.

ECMAScript6 기능

let, const키워드

let 키워드는 변수를 정의합니다. 함수 스코프를 가지던 var와는 달리 스코프를 중괄호 블록 내로 제한합니다.

if(true)
{
    let x = 12;
    alert(x); //대화상자에 12라고 뜹니다.
}

alert(x); //여기서 x는 undefined가 나옵니다.

2015년 9월 기준으로 IE11, 엣지 브라우저, 크롬이 기능을 구현했습니다.

const는 변수의 값을 바꿀 수 없다고 선언합니다. 만약 같은 스코프에서 동일한 이름의 변수를 선언하거나, 혹은 값을 넣으려 할 경우, 에러가 납니다. 2015년 9월 기준으로 IE11, 엣지 브라우저, 파이어폭스, 크롬이 기능을 구현했습니다.

다중 리턴값

파이썬처럼 함수에서 여러 값을 한번에 반환할 수 있게 되었습니다.

function function_name()
{
    return [1, 6, 7, 4, 8, 0];
}

var q, w, e, r, t, y;

// 2번째와 4번째 요소는 무시됩니다.
[q, w, , r, , y] = function_name();

alert(y);//y is 0

매개변수 기본값

Python, C++가 마찬가지로 매개변수 기본값을 넣을 수 있습니다. 2015년 9월 기준으로 파이어폭스만 기능을 구현했습니다.

... 키워드

2015년 9월 기준으로 엣지, 파이어폭스만 기능을 구현했습니다.

함수의 가변인자

...키워드를 이용하여 함수에서 가변인자를 사용할 수 있습니다.

function function_one(...args)
{  
    var res = 0;
    for(var i = 0 ; i < args.length ; i++)
    {
        res += args[i];
    }
    return res;
}

function_one(1, 4);//5
function_one(1, 4, 7);//12
function_one(1, 4, 7, 0);//12
배열의 각 요소를 함수의 매개변수로 넣기
function function_one(a, b)
{  
    return a + b;
}
var a = [1,2];
function_one( ...a);

Class키워드와 상속의 지원(!!)

function과 prototype을 이용한 객체지향이 아닌 class를 이용한 객체지향을 할 수 있게 되었습니다.

새로운 함수 선언

(매개변수) =>{ 함수구현 }; 형식으로 함수를 선언할 수 있습니다.

엣지 브라우저, 파이어폭스 , 크롬이 지원합니다.

var sum = (x, y) => x + y;
console.log(sum(2, 900));

기타

asm.js라고 하는 특이한 표준이 있는데, JavaScript를 어셈블리어처럼 컴파일할 수 있도록 JavaScript 문법을 매우 제약한 스펙이다.

각주