HTML 안에 직접 스크립트를 작성하는 방식은 스크립트가 아~주 간단할 때만 사용한다.
-> 스크립트가 긴 경우엔 보통 별개의 분리된 파일로 만들어서 저장한다.
src로 외부 코드를 연결하거나, script 태그에 직접 코드를 작성해야한다. 전자가 이미 있으면 후자는 무시된다. 따라서 둘중에 하나만 하거나, 분리해서 작성해야 한다.
스크립트를 별도의 파일에 작성하면 브라우저가 스크립트를 다운받아 캐시(cashe)에 저장하기 때문에, 성능상의 이점이 있다.
-> 여러 페이지에서 동일한 스크립트를 사용하는 경우, 브라우저는 페이지가 바뀔 때마다 스크립트를 새로 다운받지 않고 캐시로부터 스크립트를 가져와 사용한다. 따라서 스크립트 파일을 1번만 다운받으면 된다. 이를 통해 트래픽이 절약되고 웹 페이지의 실제 속도가 빨라진다.
줄바꿈이 있다면 세미콜론 생략 가능 -> 세미콜론 자동 삽입
alert('hello')
alert('world')
아래 예시는 세미콜론 자동삽입 불가
alert(3 +
1
+ 2);
반면, 세미콜론이 정말 필요하지만 js가 이를 추정하지 '못하는' 상황도 존재
따라서, 세미콜론을 꼭 사용하는게 안전하다.
//한줄 주석
/*두
줄
이 상 주석*/
//중첩 주석은 불가능 주의!! (/**/안에 /**/)
주석을 달면 코드의 전체적인 길이가 증가한다. 하지만 이는 전혀 문제가 되지 않는다. 프로덕션 서버에 배포하기 전에 코드를 압축해주는 도구가 많이 있고, 이 도구들은 주석을 삭제해주기 때문이다. 실행 중인 스크립트엔 주석이 들어가지 않으므로, 주석은 최종으로 배포되는 코드에 부정적인 영향을 끼치지 않는다.
"use strict";
// 이 코드는 모던한 방식으로 실행됨. 무조건 코드 최상단에 위치해야함. use strict 위엔 무조건 주석만 사용 가능
//엄격모드는 한번 쓰면 무를 수 없음
'use strict'입력 후 Shift+Enter키 눌러서 원하는 스크립트 작성
클래스, 모듈을 사용할 땐 use strict가 자동 적용됨.
let message;
message = 'Hello';
alert(message);
message = 'World!';
let user = 'John', age = 25, message = 'Hello'; //비추! 가독성 저하
let message = "This";
// 'let'을 반복하면 에러가 발생합니다.
let message = "That"; // SyntaxError: 'message' has already been declared
let과 var는 거의 동일하게 동작. 하지만 var는 오래된 방식!
함수형(functional) 프로그래밍 언어는 변숫값 변경을 금지한다. 스칼라(Scala)와 얼랭(Erlang)은 대표적인 함수형 언어입니다.
let userName;
let $;
let _ = 2;
let test123;
//let 1a; let my-name; 불가능
변화하지 않는 변수를 선언할 땐 let 대신 const 사용
const myBirth = '20000909';
기억하기 힘든 값을 변수에 할당해 별칭으로 사용. 보통 하드 코딩한 값의 별칭을 만들 때 사용.(실행 전에 이미 값을 알고 있고, 코드에서 직접 그 값을 쓰는 경우)
const COLOR_RED = "#F00";
let color = COLOR_RED;
const BIRTHDAY = '18.04.1982'; // 대문자 상수로 바꿔도 괜찮
const AGE = someCode(BIRTHDAY); // 대문자 상수 부적절. someCode()리턴값에 따라 달라짐.
// no error
let message = "hello";
message = 123456;
이처럼 자료의 타입은 있지만 변수에 저장되는 값의 타입은 언제든지 바꿀 수 있는 언어를 ‘동적 타입(dynamically typed)’ 언어라고 부른다.
FireFox, Chrome, Edge, Safari에서만 지원.
// 끝에 'n'이 붙으면 BigInt형
const bigInt = 1234567890123456789012345678901234567890n;
// 표현식을 문자열 중간에 삽입
alert( `the result is ${1 + 2}` ); // the result is 3
let isGreater = 4 > 1;
alert( isGreater ); // true (비교 결과: "yes")
let age;
let myname = undefined; //null 권장
alert(age); // 'undefined'가 출력됩니다.
객체형을 제외한 다른 자료형은 한 가지만 표현 가능해서 원시(primitive)자료형이라고 불림.
하지만 객체는 복찹한 개체(entity)를 표현 가능.
심볼은 객체의 고유한 식별자를 만들 때 사용됨.
type of 0
typeof(true)
alert("Hello");
result = prompt(title, [default]);
사용자가 입력 필드에 기재한 문자열 반환 typeof(title) ==> string
IE 사용자를 비롯한 모든 사용자에게 깔끔한 프롬프트를 보여주려면 아래와 같이 두 번째 매개변수를 항상 전달해 줄 것을 권장한다.
let test = prompt("Test", ''); // <-- IE 사용자를 위한 매개변수 처리
result = confirm(question);
위 함수들은 모두 모달 창을 띄워주는데, 모달 창이 떠 있는 동안은 스크립트의 실행이 일시 중단된다. 사용자가 창을 닫기 전까진 나머지 페이지와 상호 작용이 불가능하다.
alert() 함수는 매개변수로 문자형을 받아야하기 때문에, 문자형 이외의 값이 들어오면 String으로 형변환 됨.
String(value)
let age = Number("임의의 문자열 123");
alert(age); // NaN, 형 변환이 실패합니다.
Number(undefined) //NaN
Number(null) // 0
Number(true) // 1
Number(string) //문자열의 처음과 끝 공백이 제거됩니다. 공백 제거 후 남아있는 문자열이 없다면 0, 그렇지 않다면 문자열에서 숫자를 읽습니다. 변환에 실패하면 NaN이 됩니다.
Number("") //0
Boolean("0") //true
Boolean(" ") //true
Boolean("") //false
alert('1'+2); //"12"
alert(2+2+'1'); //"41"
alert(6-'2'); //4
alert('6'/'2'); //3
alert(+true); //1
alert(+""); //0
let a, b, c;
a = b = c = 2 + 2;
alert( a ); // 4
alert( b ); // 4
alert( c ); // 4
let n = 2;
n *= 3 + 5;
alert( n ); // 16 (*=의 우측이 먼저 평가되므로, 위 식은 n *= 8과 동일합니다.)
let counter = 0;
counter++;
++counter;
alert( counter ); // 2, 위 두 라인은 동일한 연산을 수행합니다.
쉼표 연산자 ,는 여러 표현식을 코드 한 줄에서 평가할 수 있게 해준다. 이때 표현식 각각이 모두 평가되지만, 마지막 표현식의 평가 결과만 반환되는 점에 유의해야 한다.
let a = (1 + 2, 3 + 4);
alert( a ); // 7 (3 + 4의 결과)
JS는 사전순으로 문자열을 비교.
비교하려는 값의 자료형이 다르면 js는 이 값들을 숫자형으로 바꿈.
lert( '2' > 1 ); // true, 문자열 '2'가 숫자 2로 변환된 후 비교가 진행됩니다.
alert( '01' == 1 ); // true, 문자열 '01'이 숫자 1로 변환된 후 비교가 진행됩니다.
https://ko.javascript.info/comparison