하나의 파일이 하나의 프로그램인데 이 여러 파일들이 하나의 프로그램처럼 작동할 수 있는 이유는 "global scope"를 통해 각 파일의 state를 공유해서. global scope namespace에서 섞여 런타임 때 같이 동작.
typeof 42; // "number"
typeof "abc"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object" -- oops, bug!
typeof { "a": 1 }; // "object"
typeof [1,2,3]; // "object"
typeof function hello(){}; // "function"
null은 오류고, function은 "function"이다.
let은 block scoping, var는 function scoping
function a(hi) {};//function declaration 컴파일 시 발생
var b = function(hi){};// function expression 런타임 중 저 구문에 도달하기 전까지 식별자와 연결되지 않음.
===
은 type과 value 모두 비교한다. coercion 불허.
그런데..
NaN === NaN; // false
0 === -0; // true
Number.isNaN()
과 Object.is()
를 이용하자. 특히 뒤는 ====
다.
원시값 외 object 같은 경우엔 주소값을 비교하여 참조관계를 알 수 있다.
[ 1, 2, 3 ] === [ 1, 2, 3 ]; // false
{ a: 42 } === { a: 42 } // false
(x => x * 2) === (x => x * 2) // false
var x = [ 1, 2, 3 ];
// assignment is by reference-copy, so
// y references the *same* array as x,
// not another copy of it.
var y = x;
y === x; // true
y === [ 1, 2, 3 ]; // false
x === [ 1, 2, 3 ]; // false
19 == "19"; //숫자로 바뀌어 비교.
"" == 0; // 편함
0 == false;
그런데 아래와 같이 모두 문자인 경우, alphabetical 비교.
"10" < "9"; //true
type을 만드는 것. 자체로 value가 아님. 사용시 new
를 통해 instantiated. 상속가능.
데이터, 동작은 유닛에 그룹화한다는 점에서 클래스와 비슷, include, access 가능. 눈에 띄는 차이 class는 this. 사용, 모듈은 스코프 안의 변수를 이용.class는 인스턴스 api가 클래스 안에 정의되어 있어 전부 공개, 모듈은 참조되지 않은 것은 비공개로 남는다.
import, export. 이걸 쓰자.