오늘 한 것
변수
원시 값 자체와, 원시값을 할당한 변수를 혼동하면 안 된다. 변수는 재할당할이 가능하지만, 원시 값은 객체타입과 다르게 변형할 수 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var bar = "baz"; console.log(bar); bar.toUpperCase(); console.log(bar);
bar = bar.toUpperCase();
var x = "Hello"; console.log(x);
var foo = []; console.log(foo); foo.push("plugh"); console.log(foo);
|
원시값 MDN
- 원시 값을 교체할 수는 있지만, 직접 변형할 수는 없다.
아래의 경우 x와 y의 값을 바꾸는 과정이다.
1 2 3 4 5 6 7 8 9 10 11 12
| var x = 1; var y = 2; var z = y;
y = x; x = z; console.log(x, y);
[y, x] = [x, y]; console.log(x, y);
|
- 원시값을 변형할 수는 없지만 변수의 값은 재할당이 가능하다.
표현식과 문
표현식인 문과 표현식이 아닌 문은 변수에 할당해보면 안다. 표현식인 문은 변수에 할당되지만, 표현식이 아닌 문은 변수에 할당되지 않는다.
문 > 값 > 표현식 > 리터럴
과 같이 포함 관계를 갖는다. 당연히 역은 성립되지 않는다.
토큰에는 문을 구성하는 모든 기본 요소가 토큰의 지위를 갖을 수 있지만 토큰의 조건은 문의 구성 요소만을 토큰이라 말한다.
콘솔에서 표현식인 문을 실행하면 평가되어 생성된 결과인 값을 출력한다.
- 위와 같은 표현식과는 다르게 표현식이 아닌 문을 실행하면 언제나 undefined를 출력한다.
- 이를 완료값이라 한다. 완료값은 표현식의 평가 결과가 아니다. 따라서 표현식처럼 변수에 할당, 참조가 불가능하다.
데이터 타입
- JavaScript에서 데이터 타입은 변수가 아닌 값에 있다.
- JS에서 모든 숫자는 실수이다. 배정밀도 64비트 부동소수점 형식을 따른다.(8바이트)
1 2 3 4 5 6 7 8 9 10 11
| var x = 1; console.log(x, typeof x);
var y = "1"; console.log(y, typeof y);
console.log(x == y);
console.log(x === y);
|
- 같은 값 1이 아닌 숫자와 문자에 차이가 있는 1이다.
- 위 결과가 0.3이 아닌 이유는 컴퓨터의 한계다. 10진법을 2진법으로 변환해서 계산하면 높은 확률로 무한 소수가 발생하기 때문에 오차가 있다.
왜 8bit는 1byte일까?
- 최근에는 8bit가 1byte지만, 역사적으로 6bit, 7bit, 9bit 등의 1byte가 존재했다.
- 하여튼 8bit가 1byte인 이유는 컴퓨터의 발전이 영문권에서 발전한 것과 큰 연관이 있다.
- ASCII(아스키 코드: 영문 알파벳을 사용하는 대표적인 문자 인코딩)에서의 영문자와 숫자 1자가 7bit이다.
- 여기에 통신 오류검출을 위한 parity bit를 1bit 추가해서 8bit가 됐다는 설이 가장 유력하다.
오늘 느낀 것
- 기초를 파면서 C나 JAVA와는 다른 점이 생각보다 많으며 새로운 것도 많이 배우고 있다.
- JavaScript를 공부하다가 C, JAVA가 차라리 더 편하겠다는 생각이 들 때면 개발을 포기하고 싶었던 그때를 떠올리며 마음을 잡자…
- 재밌다! 내일도 ‘즐코’
Nyong’s GitHub