배정밀도 64 비트 부동소수점 형식
을 따른다는 것은 10진수의 숫자를 2진수 비트로 변환하여 64 비트 형식으로 메모리에 저장된다는 것이다. 64 비트로 표현하는 값은 정밀도에서 한계가 있기 때문에 근사치의 값으로 변환 된다. 때로는 정확한 숫자 값이 아닐 수 있다.문자열의 줄바꿈을 표한할 때 옛날 프린터의 동작 방식에서 따온 용어들이 있다.
VS Code 어디선가 CRLF와 LF를 본 기억이 있었다. (바로 여기)
하단 오른쪽 상태 표시줄에서 Line Sequence를 LF 또는 CRLF로 변경할 수 있다. 바꿔도 차이가 눈으로 보이지 않는다. 하지만 16진수로 파일을 확인하면 줄바꿈 부분에서 차이가 있다.
Hex Editor
VS Code Extension을 설치 후 파일을 열어보면 LF일 때는 줄바꿈이 0A
(라인 피드 LF)로 표현되고 CRLF일 때는 0D 0A
(캐리지 리턴 CR + 라인 피드 LF)로 표현된 것을 확인할 수 있다.
const key = Symbol("key");
0100 0001
은 String 타입으로는 'A', Number 타입으로는 65로 해석된다.산술 연산자
NaN
(Not a Number)를 반환한다.++
, --
연산자는 부수효과가 있다. prefix
로 연산자가 붙는지 postfix
로 연산자가 붙는지에 따라 부수효과의 시점이 다르게 동작한다.// Postfix ++
let a = 1;
const b = a++;
// a = 2, b = 1
// b에 a를 할당 > a 값 1 증가
// Prefix ++
let a = 1;
const b = ++a;
// a = 2, b = 2
// a 값 1 증가 > b에 a를 할당
"1" + 2; // '12'
비교 연산자
동등 연산자(==
)는 값이 같은지 비교하지만 타입이 같은지는 비교하지 않는다
일치 연산자(===
)는 값과 타입이 모두 같은지 좀 더 엄격한 비교를 한다
비교시 동등 연산자보다는 일치 연산자(===
)을 사용하는 것이 좋다
NaN
여부를 확인할 때는 Number.isNaN()
함수를 사용한다
Object.is()
메서드 사용시 ===
을 사용했을 때와 다른 경우가 있다.
// === 로 값 비교
+0 === -0; // true
NaN === NaN; // false
// Object.is() 로 값 비교
Object.is(+0, -0); // false
Object.is(NaN, NaN); // true
삼항 연산자
const result = a > b ? "a가 b보다 크다" : "a가 b보다 크지 않다";
논리 연산자
!(a || y) === !a && !b;
typeof 연산자
지수 연산자
// ** 지수 연산자는 ES7에 도입되었다
2 ** 2;
// 이전에는 이렇게 지수 연산을 했었다
Math.pow(2, 2);
// 지수연산자의 피연산자가 음수일 때는 꼭 괄호를 붙여야한다. 그렇지 않으면 SyntaxError가 발생한다
-2 ** 2;
// 정상 동작
(-2) ** 2;
// 할당 연산자와 함께 사용 가능
let number = 2;
number **= 2
그 외의 연산자
모던 자바스크립트 Deep Dive
이 책 정말 좋은 것 같습니다. 더 빨리 이 책을 읽었더라면 얼마나 좋았을까하는 생각이 들었고 지금이라도 접하게되어 다행입니다. 새롭게 배우는 내용들이 많아서 매우 좋았습니다. 혼자 읽었으면 꾸준함이 떨어졌을텐데 스터디 참여하기 잘했다는 생각이 들었습니다. (벌금을 내지 않기위한 몸부림)