암묵적인 “느슨한 모드(Sloppy Mode)”를 해제하고, 명시적인 “엄격 모드(Strict Mode)”를 사용하는 방법
이 지시자가 스크립트 최상단에 오면 스크립트 전체가 “모던한” 방식으로 동작. 반드시 최상단에 위치해야한다. 그렇지 않으면 엄격 모드가 활성화되지 않을 수도 있다. 이 지시자가 스크립트 최상단이 아닌 함수 본문 맨 앞에 온다면 오직 해당 함수만 엄격 모드로 실행. 엄격 모드는 대개 스크립트 전체에 적용한다.
ex) use strict가 없다면 과거 스크립트와의 호환성을 유지할 수 있기 때문에 let 없이도 단순하게 값을
할당해 변수를 생성하는것이 가능
/*let*/ num = 5; //변수 'num'이 정의되어있지 않더라도, 단순 할당만으로 변수가 생성된다.
var는 let과 거의 동일하게 동작. var도 let처럼 변수를 선언하는 데 쓰이지만, var는 오래된 방식
변화하지 않는 변수를 선언할 땐, let 대신 const를 사용. 상수는 당연 재할당할 수 없다.
const myBirthday = '14.10.1996';
대문자 상수
기억하기 힘든 값을 변수에 할당해 별칭으로 사용하는 것은 널리 사용되는 관습
이런 상수는 대문자와 밑줄로 구성된 이름으로 명명
const COLOR_RED = "#F00";
const COLOR_GREEN = "#0F0";
const COLOR_ORANGE = "#FF7F00";
let color == COLOR_ORANGE; //색상을 고르고 싶을 때 별칭을 사용
그렇다면 언제 일반적인 방식으로 상수를 명명하고, 언제 대문자를 사용해서 명명하는걸까.
‘상수’는 변수의 값이 절대 변하지 않음을 의미한다. 그중엔 (빨간색을 나타내는 16진수 값처럼) 코드가 실행되기 전에 이미 그 값을 알고 있는 상수도 있고, 런타임 과정에서 계산되지만 최초 할당 이후 값이 변하지 않는 상수도 있다.
const pageLoadTime = /*웹페이지를 로드하는데 걸린 시간*/;
pageLoadTime의 값은 페이지가 로드되기 전엔 정해지지 않기 때문에 일반적인 방식으로 변수명을 지었다.
하지만 이 값은 최초 할당 이후에는 변경되지 않으므로 여전히 상수. 정리하자면, 대문자 상수는 ‘하드 코딩한’ 값의 별칭을 만들 때 사용하면 된다.
c언어나 java에서는 자료형을 함께 선언하지만 JS에서는 let var const로 선언한다.
🧋 var, let, const를 사용해 변수를 선언할 수 있다.
let - 모던한 변수 선언 키워드
var - 오래된 변수 선언 키워드, 잘 사용하지 않는다.
const - let과 비슷하지만, 변수의 값을 변경할 수 없다.
🧋 자바스크립트에는 여덟가지 기본 자료형이 있다.
숫자형정수, 부동 소수점 숫자 등의 숫자를 나타낼 때 사용. 정수의 한계는 ±253
bigint길이 제약 없이 정수를 나타낼 수 있다.
문자형빈 문자열이나 글자들로 이뤄진 문자열을 나타낼 때 사용. 단일 문자를 나타내는 별도의 자료형은 없습니다.
불린형true,false를 나타낼 때 사용
nullnull값만을 위한 독립 자료형.null은 알 수 없는 값을 나타낸다.
undefinedundefined값만을 위한 독립 자료형.undefined는 할당되지 않은 값을 나타낸다.
객체형복잡한 데이터 구조를 표현할 때 사용.
심볼형객체의 고유 식별자를 만들 때 사용.
typeof연산자는 피연산자의 자료형을 알려준다.
typeof x또는typeof(x)형태로 사용.- 피연산자의 자료형을 문자열 형태로 반환.
자바스크립트에서는 이 둘에 차이를 두지 않는다. 역 따옴표로 변수나 표현식을 감싼 후 ${…} 안에 넣어주면, 원하는 변수나 표현식을 문자열 중간에 손쉽게 넣을 수 있다.
객체형은 특수한 자료형이다. 객체형을 제외한 다른 자료형은 문자열이든 숫자든 한 가지만 표현할 수 있기 때문에 원시 자료형이라 부른다. 반면 객체는 데이터 컬렉션이나 복잡한 개체(entity)를 표현할 수 있다.
심볼형은 객체의 고유한 식별자를 만들 때 사용된다.
typeof 연산자는 인수의 자료형을 반환한다.
자료형에 따라 처리 방식을 다르게 하고 싶거나 변수의 자료형을 빠르게 알아내고자 할 때 유용하다.
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
bigint 사용법 -> 정수 리터럴 끝에 n을 붙이면 만들 수 있음. ~~(상수와 리터럴의 차이 메모 작성)~~
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
typeof Math // "object" (1)
수학 연산을 제공하는 내장 객체이므로 object가 출력된다.
typeof null // "object" (2)
널은 별도의 고유한 자료형을 가지는 특수 값으로 객체가 아니지만, 하위 호환성을 유지하기 위해 이런 오류를
수저하지 않고 남겨둔 상황. 언어 자체의 오류이므로 널이 객체가 아님에 유의
typeof alert // "function" (3)
피현산자가 함수면 펑션을 반환. 그러나 함수형은 따로 없음. 함수는 객체형에 속한다. 이러한 방식이 형식적으론
잘못됐지만, 오래전 만들어진 규칙이었기 때문에 하위 호환성 유지를 위해 남겨진 상태. 한편, 실무에선 이런 특징이
매우 유용하게 사용되기도 한다.