2. 01. ==
자바스크립트에는 비교연산자로 === / !== 와 == / != 이 있다.
두개의 연산자들의 차이는 같음을 정의하는 기준이 서로 다르다.
===(일치연산자, is strictly equal to) 같음을 정의하는 기준이 매우 엄격
==(동등연산자, is equal to)두 피연산자가 동등한지, 타입변환 허용
3. 02. WITH
with문은 유효범위 체인을 임시로 변경하려 할때 쓰임
with(객체){구문}
with문은 엄격한 모드에서 사용할 수 없다.
with문을 사용하는 자바스크립트 코드는 최적화하기 힘들고 with문을
사용하면 변수에 바인딩을 하기 어렵기 떄문에 사용하지 않은 코드에 비
해 현저히 느려진다.
4. 03. EVAL
eval함수는 문자열을 자바스크립트 컴파일러에 넘긴 후 그 결과를 실행
문제점
1. eval을 사용한 코드는 읽기 어렵다.
2.eval을 사용하면 컴파일러를 사용해야 함으로 속도가 느려진다.
3.보안의 문제를 일으킬 수 있는 코드라도 무조건 실행
setTimeout과 setInterval 함수도 문자열 또는 함수를 인수로 취할 수 있
는데 이때 문자열 인수를 제공하면 eval 처럼 동작하므로 주의
6. 05. 다음 CASE절까지 실행하는 SWITCH문
switch case문 중 다음 case문 까지 계속 실행되는 경우 오류가 발생할
수 있으니 편리하더라고 사용하지 말아야 함.
7. 06. 블록이 없는 문장
if문이나 for문에서 한줄만 사용할시 따로 블록을 따로 쳐줄 필요가 없지
만 가독성이나 코드에 간결함을 위해서 블록을 나누자
If(ok)
t = true;
advance();
If(ok){
t = true;
advance();
}
If(ok){
t = true;
}
advance();
8. 07. ++ --
6번 블록이 없는 문장 처럼, 좀더 가독성을 높이기 위해서 증감 연산자를
사용하지 말아야 한다.
9. 08. 비트 연산자
정수형일 경우에 비트연산자는 빠르게 동작하지만 자바스크립트는 정수
형이 없고 부동소수점(실수)이기 때문에 비트연산자 사용시 정수로 변환
후 다시 실수형으로 바꾸기 때문에 속도가 느려진다.
10. 09. 함수 문장 VS 함수 표현식
함수 문장
function foo() {}
함수 표현식
var foo = function foo () {}
차이점
함수 문장으로 선언을 하면 호출을 어디에서나 불러도 상관 없다.
함수 표현식으로 선언하면 미리 정의하지 않고 호출하면 에러
이러한 함수 문장의 사용은 함수를 사용하기 전에 반드시 선언해야 한다
는 요구사항을 경감, 구조를 엉성하게 만든다.
11. 10. 데이터 타임 랩퍼
자바스크립트는 숫자, 문자열, 불리언 데이터 타입을 지원할 뿐 만 아니
라 기본 데이터 타입을 둘러싸는 랩퍼들(Number, String, Boolean 클래
스)도 지원
이러한 래퍼들은 완전히 필요가 없으며 때때로 혼란을 줄 수 있다.
12. 11. NEW
자바스크립의 new 연산자는 피연산자의 프로토타입 멤버들을 상속하는
객체를 생성하고 이 객체를 this에 바인딩하면서 피연산자를 호출
new 연산자를 안쓰면 일반적인 함수 호출을 하게 되고 이때 this는 새로
운 객체가 아니라 전역객체에 바인딩
new를 안 써도 컴파일 시나 실행 시에 어떠한 경고도 없다.
new와 함께 사용하기 위해서 만든 함수의 이름은 각 단어의 첫 글자를
대문자로 표기해서 new를 생략한 실수를 찾을 수 있는 단서 제공
저자는 new 연산자를 사용하지 않는것이 좋다라고 함.
13. 12. VOID
자바스크립트에서 void는 피연사자를 취한 후 undefined를 반환하는
연산자. void(0) 유용하지 않고 매우 혼동