0%

201118_TIL(변수_2)

오늘 한 것

변수

원시 값 자체와, 원시값을 할당한 변수를 혼동하면 안 된다. 변수는 재할당할이 가능하지만, 원시 값은 객체타입과 다르게 변형할 수 없다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 문자열 메서드는 문자열을 변형하지 않음
var bar = "baz";
console.log(bar); // baz
bar.toUpperCase();
console.log(bar); // baz

// 할당은 원시 값에 새로운 값을 부여 (변형이 아님)
bar = bar.toUpperCase(); // BAZ

//원시타입 String도 같음
var x = "Hello";
console.log(x); // Hi

// 참조 타입인 배열은 변형함
var foo = [];
console.log(foo); // []
foo.push("plugh");
console.log(foo); // ["plugh"]

원시값 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); // 2 1

// 배열 이용
[y, x] = [x, y];
console.log(x, y); // 2 1
  • 원시값을 변형할 수는 없지만 변수의 값은 재할당이 가능하다.

표현식과 문

  • 표현식인 문과 표현식이 아닌 문은 변수에 할당해보면 안다. 표현식인 문은 변수에 할당되지만, 표현식이 아닌 문은 변수에 할당되지 않는다.

  • 문 > 값 > 표현식 > 리터럴 과 같이 포함 관계를 갖는다. 당연히 역은 성립되지 않는다.

  • 토큰에는 문을 구성하는 모든 기본 요소가 토큰의 지위를 갖을 수 있지만 토큰의 조건은 문의 구성 요소만을 토큰이라 말한다.

  • 콘솔에서 표현식인 문을 실행하면 평가되어 생성된 결과인 값을 출력한다.

1
2
> 10 + 10
< 20
  • 위와 같은 표현식과는 다르게 표현식이 아닌 문을 실행하면 언제나 undefined를 출력한다.
1
2
3
//console
> var x;
< 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); //true

// === 은 데이터타입과 값을 둘 다 비교한다.
console.log(x === y); //false
  • 같은 값 1이 아닌 숫자와 문자에 차이가 있는 1이다.
1
console.log(0.1 + 0.2); // 0.30000000000000004
  • 위 결과가 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