티스토리 뷰

 자바스크립트에서 데이터는 const let var의 키워드 + 식별자로 선언되고 데이터 타입은 할당시 자동으로 변환된다.(묵시적 형변환). 데이터 타입은 primitive와 reference 타입으로 나누어 진다.
 

 - primitive: number, string, boolean/ null, undefined ... symbol

 - reference: object, Array, Function, Date, Regexp ... Map, WeakMap, Set, WeakSet 등

 

Primitive

:원시 값(primitive, 또는 원시 자료형)이란 객체가 아니면서 메서드도 가지지 않는 데이터입니다.(MDN)

 primitive는 데이터가 들어있는 주소값이 바로 들어간다. (불변객체. 자바의 Integer, String, Boolean 등을 떠올리면 쉽다.)

 -깊은 복사를 한다. (복사 이후 값 변경 시 원래 변수의 값에 영향이 없다. 값의 참조 자체가 바뀌어 버리기 때문.)

+실제 자바스크립트를 사용할때 let upperWord = "abcd".toUpperCase(); 등과 같이 프리미티브 타입에 메서드를 사용할 수 있는데, 이는 호출시에 래퍼클래스로 감싸주는 자바스크립트의 내부로직이 있기 때문이라고 한다.(출처1)

 

 

Reference

reference는 프로퍼티들의 주소값정보(포인터)가 값으로 들어간다.(변수의 실제 값참조는 바뀔 수 있으므로 가변객체)

 -얕은 복사를 한다. (객체 참조는 그대로 있지만 객체 내부의 프로퍼티의 값 참조가 바뀌는거기 때문.)

 -참조 카운트(참조하고 있는 변수의 갯수)가 0이면 GC에 의해 자동으로 공간할당이 해제된다.

 

불변객체

얕은 복사를 방지하기 위해, 레퍼런스 타입을 별도의 불변객체로 제공해주는 라이브러리가 있다. immutable.js, baobab.js

 

중첩객체의 깊은 복사

** 중첩객체를 깊은복사하려면 재귀적으로 깊은 복사가 이루어 져야 한다.**

+Object.assign, 전개연산자로 복사하면 1레벨의 깊은 복사만 할 수 있다. 중첩객체에 대해서는 재귀적으로 해줘야한다. 

+JSON.stringfy()로 중첩객체에 대해 라이브러리 없이 깊은 복사를 할 수 있고, lodash로 더 쉽게 할수 있다.

 

undefined, null, NaN, empty

undefined

자바스크립트에서 undefined는 값이 없는 식별자에 접근할 때, 객체 내부에 존재하지 않는 프로퍼티에 접근할 때, return문이 없거나 호출되지 않는 함수를 호출한 반환값에 접근할 때.

undefined는 자동할당되는 것이 아니라 접근할 때 js에의해 자동으로 반환된다.

 

empty=값은 아니고 데이터가 안들어 있는 배열을 순회를 할때 순회의 대상조차 안될 때 출력해주는 문자.

NaN=숫자연산을 할때 숫자가 아닌것과 연산을 할때의 결과.

**undefined는 사용자가 직접 할당이 가능한 값이지만, js가 자동으로 할당해준 것일 가능성이 크므로 '없다'라는 값을 할당할 때는 null을 할당해야 한다.**

 

**undefined는 그 차체로 타입이고 없는 값을 나타낸다. 그런데 null은 object이다.(프리미티브인데 오브젝트?? 자바스크립트 버그라고 한다.) 그래서 값만 비교해주는 ==을 쓰면 값 자체가 없는 undefined와 같다 라는 결과가 나온다. 따라서 null을 비교할 때, ===을 꼭 써야한다.

출처: 코어 자바스크립트.

 

+자바스크립트의 number 자료형은 8바이트다.

자바스크립트의 number는 다른 언어의 int long longlong float double 모든 기능을 한다.

ECMA Script 명세에는 64bit double precision라고 한다. 정수 계산 가능범위는 (2 ^ 53 - 1) ~ -(2 ^ 53 - 1) 라고 한다.(하단 출처1)

 

+자바스크립트는 모든 데이터가 prototype이다.

 

출처1: https://javascript.info/primitives-methods

출처2: http://ouoiouoi.blogspot.com/2017/05/javascript-number.html

 

Javascript Number 범위

Javascript에는 정수형 소수형 구분이 없이 Number라는 자료형 밖에 없다. Number 자료형도 범위가 있을텐데 ECMA Script 명세에는 IEEE 754-2008 포멧에 따라 64bit double precision 형식으로 저...

ouoiouoi.blogspot.com

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함