*따로 요약정리해서 필요할때 찾아보기
💡 팁: 정독하지 말고 잘 모르겠으면 넘어가고 한번 더 읽자. 다음에는 놀랍게도 이해된다. 진짜다.
자바스크립트
는 ‘웹페이지에 생동감을 불어넣기 위해’ 만들어진 프로그래밍 언어
입니다.
자바스크립트
로 작성한 프로그램을 스크립트(script)
라고 부릅니다. 스크립트는 웹페이지의 HTML 안에 작성할 수 있는데, 웹페이지를 불러올 때 스크립트가 자동으로 실행됩니다.
스크립트는 특별한 준비나 컴파일 없이 보통의 문자 형태로 작성할 수 있고, 실행도 할 수 있습니다.
이런 관점에서 보면 자바스크립트는 자바(Java)와는 매우 다른 언어라고 할 수 있습니다.(자바스크립트는 자바와 아무런 연관이 없습니다.)
브라우저엔 '자바스크립트 가상 머신’이라 불리는 엔진이 내장되어 있습니다.
엔진의 종류는 다양한데, 엔진마다 특유의 코드네임이 존재
예)
V8
– Chrome과 Opera
SpiderMonkey
– Firefox
기본 원리는 다음과 같이 간단합니다.
파싱
)컴파일
)엔진
은 프로세스 각 단계마다 최적화를 진행합니다. 심지어 컴파일이 끝나고 실행 중인 코드를 감시하면서, 이 코드로 흘러가는 데이터를 분석하고, 분석 결과를 토대로 기계어로 전환된 코드를 다시 최적화하기도 합니다. 이런 과정을 거치면 스크립트 실행 속도는 더욱 더 빨라집니다.
자바스크립트
는 브라우저에서만 쓸 목적으로 고안된 언어이지만, 지금은 다양한 환경에서 쓰이고 있다.script태그
를 이용하면 자바스크립트 프로그램을 HTML 문서 대부분의 위치에 삽입할 수 있습니다. 브라우저는 이 태그를 만나면 안의 코드를 자동으로 처리합니다.
<script src="/path/to/script.js"></script>
자바스크립트 코드의 양이 많은 경우엔, 파일로 소분하여 저장할 수 있습니다. 이렇게 분해해 놓은 각 파일은 src속성
을 사용해 HTML에 삽입합니다.
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
<script src="/js/script1.js"></script>
<script src="/js/script2.js"></script>
…
src 속성이 있으면 태그 내부의 코드는 무시됩니다.
다음 코드는 실행되지 않습니다.
<script src="file.js">
alert(1);
// src 속성이 사용되었으므로 이 코드는 무시됩니다.
</script>
script src="…"
로 외부 파일을 연결할지 아니면 script 태그
내에 코드를 작성할지를 선택해야 합니다.
위의 예시는 스크립트 두 개로 분리하면 정상적으로 실행됩니다.
<script src="file.js"></script>
<script>
alert(1);
</script>
use strict
가 스크립트 최상단에 오면 스크립트 전체가 “모던한” 방식으로 동작한다.
‘상자’ 안에 데이터를 저장하는데, 이 상자에는 특별한 이름표가 붙어 있다고 상상해보자
변수
message는 message라는 이름표가 붙어있는 상자에 "Hello!"라는 값을 저장한 것이라고 생각할 수 있다. 상자 속엔 어떤 값이든지 넣을 수 있고, 원하는 만큼 값을 변경할 수도 있다.
값이 변경되면, 이전 데이터는 변수에서 제거됩니다.
let message;
message = 'Hello!';
message = 'World!'; // 값이 변경되었습니다.
alert(message);
let Hello = 'Hello world!';
let message;
// Hello의 'Hello world' 값을 message에 복사합니다.
message = Hello;
// 이제 두 변수는 같은 데이터를 가집니다.
alert(Hello); // Hello world!
alert(message); // Hello world!
let message = "This";
// 'let'을 반복하면 에러가 발생합니다.
let message = "That";
변수명에는 오직 문자와 숫자, 그리고 기호 $와 _만 들어갈 수 있습니다.
첫 글자는 숫자가 될 수 없습니다
변수명 작성에 흔히 사용되는카멜 표기법
은 단어를 차례대로 나열하면서 첫 단어를 제외한 각 단어의 첫 글자를 대문자로 작성한다.
예) myVeryLongName
예약어는 단어는 변수명으로 사용할 수 없습니다. 이 단어들은 자바스크립트 내부에서 이미 사용 중이기 때문입니다. 예) let, class, return, function
let let = 5;
// 'let'을 변수명으로 사용할 수 없으므로 에러!
let return = 5;
// 'return'을 변수명으로 사용할 수 없으므로 에러!
변화하지 않는 변수를 선언할 땐, let 대신 const
를 사용
대문자 상수
기억하기 힘든 값을 변수에 할당해 별칭으로 사용하는 것은 널리 사용되는 관습.
const COLOR_RED = "#F00";
const COLOR_GREEN = "#0F0";
대문자 상수는 ‘하드 코딩한’ 값의 별칭을 만들 때 사용하면 된다.
변수를 추가하는 것은 악습이 아닙니다. 좋은 습관입니다.
변수명은 변수가 담고 있는 것이 무엇인지 쉽게 알 수 있도록 지어져야 합니다.
let admin;
let name = "john";
admin = name;
//변경받으려는 값을 앞에 두기. admin의 위치 확인하기
alert(admin);
NaN
은 계산 중에 에러가 발생했다는 것을 나타내주는 값
따옴표
는 세 종류가 존재하는데,큰 따옴표와 작은 따옴표는 차이가 없고 백틱
은 변수나 표현식을 감싼 후 ${…}안에 넣어주면, 아래와 같이 원하는 변수나 표현식을 문자열 중간에 손쉽게 넣을 수 있습니다.
Hello
// 변수를 문자열 중간에 삽입
alert( `Hello, ${name}!` ); // Hello, John!
// 표현식을 문자열 중간에 삽입
alert( `the result is ${1 + 2}` );
// the result is 3
typeof 연산자는 두 가지 형태의 문법을 지원합니다.
연산자
: typeof x
함수
: typeof(x)
🚨🚨🚨typeof 연산자는 다시 보기🚨🚨🚨
메시지가 있는 작은 창은 모달 창(modal window) 이라고 부르는데, 모달
이란 단어엔 페이지의 나머지 부분과 상호 작용이 불가능하다는 의미가 내포되어 있다. 따라서 사용자는 모달 창 바깥에 있는 버튼을 누른다든가 하는 행동을 할 수 없다. 확인 버튼을 누르기 전까지는!
alert("Hello");
alert에서 뜨는 모달창도 마찬가지 !
브라우저에서 제공하는 prompt 함수
는 두 개의 인수를 받습니다
result = prompt(title, [default]);
let age = prompt('나이를 입력해주세요.', 100);
alert(`당신의 나이는 ${age}살 입니다.`);
// 당신의 나이는 100살입니다.
result = confirm(question);
confirm 함수
는 매개변수로 받은 question(질문)과 확인 및 취소 버튼이 있는 모달 창을 보여줍니다.
사용자가 확인 버튼을 누르면 true, 그 외의 경우는 false를 반환합니다.
let isBoss = confirm("당신이 주인인가요?");
alert( isBoss );
// 확인 버튼을 눌렀다면 true가 출력됨
// 취소 버튼을 눌렀다면 flase가 출력됨
위 함수들은 모두 모달 창을 띄워주는데, 모달 창이 떠 있는 동안은 스크립트의 실행이 일시 중단되며, 사용자가 창을 닫기 전까진 나머지 페이지와 상호 작용이 불가능하다.
🔗 Link Page
함수와 연산자에 전달되는 값은 대부분 적절한 자료형으로 자동 변환됩니다. 이런 과정을 형 변환(type conversion)
이라고 한다.
(여기선 원시형의 형변환에 대해서만 다룰 예정)
alert
는 매개변수로 문자형을 받기 때문에, alert(value)
에서 value
는 문자형이어야 한다. 만약, 다른 형의 값을 전달받으면 이 값은 문자형으로 자동 변환된다.
let value = true;
alert(typeof value);
// boolean (t/f로 판별되는 타입이라는걸 나타냄)
value = String(value);
// 변수 value엔 문자열 "true"가 저장됩니다.
alert(typeof value);
// string(중간에 문자열로 바뀌었기에 스트링이 나옴)
잘 풀어서 생각해보면 이해가 된다.
숫자형으로의 변환은 수학과 관련된 함수와 표현식에서 자동으로 일어난다.
let str = "123";
alert(typeof str); // string
let num = Number(str);
// 문자열 "123"이 숫자 123으로 변환됩니다.
alert(typeof num); // number
숫자를 하나 늘리거나 줄이는 것은 자주 사용되는 연산
let counter = 2;
counter++;
// counter = counter + 1과 동일하게 동작
alert( counter ); // 3
let counter = 2;
counter--;
// counter = counter - 1과 동일하게 동작
alert( counter ); // 1
counter++
와 같이 피연산자 뒤에 올 때 = '후위형'
++counter
와 같이 피연산자 앞에 올 때 = '전위형'
전위형은 증가·감소 후의 새로운 값을 반환하는 반면, 후위형은 증가·감소 전의 기존 값을 반환한다.
🚨🚨🚨이 부분 다시 공부🚨🚨🚨
한번 읽어보기 'ㅅ'
let year = prompt('몇 년도에 출판되었을까요?', '');
if (year < 2015) {
alert( '숫자를 좀 더 올려보세요.' );
} else if (year > 2015) {
alert( '숫자를 좀 더 내려보세요.' );
} else {
alert( '정답입니다!' );
}
조건에 따라 다른 값을 변수에 할당해줘야 할 때가 있다.
삼항(ternary) 연산자
= 조건부 연산자
let result = condition ? value1 : value2;
// 연산자 우선순위 규칙에 따라,
//비교 연산 'age > 18'이 먼저 실행됩니다.
// (조건문을 괄호로 감쌀 필요가 없습니다.)
let accessAllowed = age > 18 ? true : false;
🚨페이지에 있는 실습문제들 한번씩 풀어보면 이해 잘됨.
자바스크립트엔
세 종류의 논리 연산자 ||(OR)
, &&(AND)
, !(NOT)
이 있습니다.
let hour = 12;
let isWeekend = true;
if (hour < 10 || hour > 18 || isWeekend) {
alert( '영업시간이 아닙니다.' ); // 주말이기 때문임
}
&&의 우선순위가 ||보다 높다.
result = !value;
🚨🚨🚨이 부분 다시 공부🚨🚨🚨
반복문(loop)
을 사용하면 동일한 코드를 여러 번 반복할 수 있다.
let i = 0;
while (i < 3) { // 0, 1, 2가 출력됩니다.
alert( i );
i++;
}
🚨🚨🚨이 부분 다시 공부🚨🚨🚨
for (begin; condition; step) {..}
for (let i = 0; i < 3; i++) { // 0, 1, 2가 출력됩니다.
alert(i);
}
복수의 if 조건문은 switch문으로 바꿀 수 있다.
🚨🚨🚨이 부분 다시 공부🚨🚨🚨
: 주요 코드 흐름을 차지하는 방식
function sum(a, b) {
let result = a + b;
return result;
}
: 표현식 형태로 선언된 함수
let sum = function(a, b) {
let result = a + b;
return result;
};
// 화살표(=>) 우측엔 표현식이 있음
let sum = (a, b) => a + b;
// 대괄호{ ... }를 사용하면 본문에 여러 줄의 코드를
//작성할 수 있음. return문이 꼭 있어야 함.
let sum = (a, b) => {
// ...
return a + b;
}
// 인수가 없는 경우
let sayHi = () => alert("Hello");
// 인수가 하나인 경우
let double = n => n * 2;
let func = function(arg1, arg2, ...argN) {
return expression;
};
// 위 함수의 축약 버전은 아래와 같다.
let func = (arg1, arg2, ...argN) => expression
🚨🚨🚨이 부분 다시 공부🚨🚨🚨
중괄호 없이 작성: (...args) => expression
화살표 오른쪽에 표현식을 둡니다. 함수는 이 표현식을 평가하고, 평가 결과를 반환합니다.
중괄호와 함께 작성: (...args) => { body }
본문이 여러 줄로 구성되었다면 중괄호를 사용해야 합니다. 다만, 이 경우는 반드시 return
지시자를 사용해 반환 값을 명기해 주어야 합니다.