챕터 2 ) 값 Value 🔸 배열 : JS에서는 문자열, 숫자, 객체, 배열까지 담을 수 있다.(배열을 담을 경우 다차원 배열이 된다) 🔸 문자열 : 문자열과 배열은 비슷하지만, 문자열을 "불변값" 이고, 배열은 "가변값" 이다. 🔘 문자열은 불변값 이므로 메서드에서의 내용변경은 새로운 문자열 생성 후 반환된다. 🔸 숫자 🔹 JS에서 유일한 숫자타입 : Number ➡ 정수, 부동 소숫점 숫자 등... (64 바이너리 사용) 🔹 숫자구문 10진수 리터럴로 표시 소숫점 앞 정수가 0이면 생략가능(0.42 ➡ .42) 소숫점 이하가 0일때도 생략 가능(42.0 ➡ 42.) 아주 크거나 작은 수는 지수형으로 표시( .toExponontial 메서드 사용 ) 숫자값은 Number 객체로 박싱할 수 있기에 Nu..
JavaScript
챕터 1 ) 타입 Type 🔸Javascript = 동적타입 언어 🔸Type : JS 엔진, 개발자 모두에게 값과 다른 값을 분별할 수 있는 고유한 내부 특성의 집합 🔸내장 타입 null undefined boolean number string object symbol Object를 제외한 이들은 원시 타입이다. Null은 Falsy한 유일한 원시값이며 타입은 Object이다. Function은 Object의 하위타입이며, 함수 인자의 갯수는 .length로 알 수 있다. Array 또한 Object의 하위 타입이다. 🔸 JS는 타입 강제를 하지 않는다. (number타입이였던 변수가 string으로 될 수 있다) 🔸 변수 값이 처음 할당된 값과 동일한 타입일 필요는 없다. 🔸 typeof의 반환 값은 ..
TDZ 관련 에러는 ES6 디폴트 인자 값에서도 찾아볼 수 있다. var b = 3; function foo(a = 42, b = a + b + 5){ ... } 좌변의 b는 아직 TDZ에 남아있는 b를 참조하려하기에 에러를 던지지만, 이 시점에서 인자 a는 TDZ를 밟고 간 이후여서 문제가 없다. ES6 디폴트 인자 값은 함수에 인자를 넘기지 않거나 undefined를 전달했을 때 적용된다. function foo(a = 42, b = a + 1){ console.log(a, b); } foo(); // 42 43 foo( undefined ); // 42 43 foo(5); // 5 6 foo(void 0, 7); // 42, 7 foo( null ); // null 1 a + 1 표현식에서 null..
자바스크립트에는 하위 에러 타입(TypeError, ReferenceError, SyntaxError 등)뿐만 아니라, 일부 에러는 컴파일 시점에 발생하도록 문법적으로 정의되어 있다. 자바스크립트에서는 컴파일 도중에 조기 에러로 붙잡아 던지게 되어있는, 여러가지 조건이 있다. 구문 에러( a = , 등과 같은) 는 물론, 자바스크립트 문법에는 구문상 오류는 아니지만 허용되는 것들도 정의되있다. 코드가 실행되기도 전에 발생하므로 이런 에러는 try ... catch로 잡을 수 없으며, 그저 프로그램 파싱/컴파일이 실패한다. 자바스크립트 구문상 아무 문제가 없지만 올바르지 않은 정규 표현식은 조기 에러를 던진다. var a = /+foo/; // 에러 할당 대상은 반드시 식별자여야 하므로 다음 예제에서 42..
ASI( Automatic Semicolon nsertion )는 자바 스크립트 프로그램의 세미콜론(;)이 누락된 곳에 엔진이 자동으로 ;을 삽입하는 것이다. JS는 단 하나의 ;이 없으면 동작을 하지 않기에 꼭 필요하지만 ;을 누락해도 동작하는 이유는 ASI 덕분이다. 하지만, for( ; ; )같이 ;이 필수적으로 들어가야하는 부분은 꼭 넣어줘야한다. ASI의 명세에는 에러 정정 루팅리라 기술되어 있지만구체적으로는 파서 에러이다. 파서에러는 프로그램을 부정확하게/잘못 코딩했기 때문에 나는 것일 뿐, 다른 경우는 없다. 따라서 ASI가 정정했음에도 에러가 발생하면 작성자가 짠 코드에 문제가 있다는 것이다. 이러한 정보를 바탕으로 책의 저자는 이렇게 말한다. 필요하다고 생각되는 곳이라면 어디든지 세미콜론..
연산자 우선순위 연산자 우선순위 표현식에 연산자가 여러 개 있을 경우 처리되는 규칙 우선 기본적인 우선순위 부터 알아보자 = 연산자 > && , || > ? : 이때, &&는 항상 || 보다 먼저 평가된다. 1) 단락 평가 &&, || 연산자는 좌측 피연산자의 평가 결과만으로 전체 결과가 이미 결정될 경우 우측 피연산자의 평가를 건너뛴다. 그래서 단락이라는 말이 유래되어 단락 평가 특성을 갖는다. const doSomething = (opts) => { if(opts && opts.cool){ ... } } 위의 코드에서 opts가 유효하지 않으면 opts.cool의 평가를 자동으로 건너뛴다. 이로써 불필요한 작업이 줄어들게 된다. 2) 끈끈한 우정 이번에는 삼항 연산자 ?와 : 를 이용해 연산자의 우선..