Javascript의 primitive type, object와 typeof

old_dorim·2022년 9월 23일
0

애증의 JavaScript

목록 보기
6/8

원시 타입

언어의 최고 로우 레벨에서 직접 표현되는 불변 데이터이다.

string

문자

number

숫자
Number 타입은 배정밀도 64비트 이진 형식 IEEE 754 값(-(2^53 − 1)부터 2^53 − 1까지의 수.
부동소수점 숫자, +Infinity, -Infinity, NaN.

참고로 Not a Number인 NaN의 타입도 number이다. NaN은 number type인데 숫자가 아닌데요... 라는 뜻이다.

bigint(최근 추가)

지원 안 되는 브라우저 많음.
number보다 큰 정수 처리가 가능하며, Number와 혼합 연산이 안된다.

const bigint = 1234567890123456789012345678901234567890n;

const sameBigint = BigInt("1234567890123456789012345678901234567890");

둘 중 한 방식으로 사용 가능.

boolean

true/false
0과 1로 자동으로 변환되거나 변환 당하는 일이 많은 친구들.

undefined

값을 할당하지 않은 변수.

symbol(최근 추가)

'심볼(symbol)'은 유일한 식별자(unique identifier)를 만들고 싶을 때 사용. 문자형(string)과 함께 객체 프로퍼티 키로 쓸 수 있다. 유일한 값을 만들어준다.

const good=Symbol("what")
const bad=Symbol("what")
console.log(good==bad)//false

null

console.log(typeof null)//object

typeof null을 하면 object라고 나오지만, 사실 원시 타입 null이다. primitive 타입이다. typeof의 에러이다...

자바스크립트를 처음 구현할 때, 자바스크립트 값은 타입 태그와 값으로 표시되었고, 객체의 타입 태그는 0이었다. null은 Null pointer(대부분의 플랫폼에서 0x00)로 표시했고, null이 타입 태그로 0을 가지게 되었다고 mdn에 있는데 그걸 말이라고 하냐 지금.

ES6에 누가 바꾸자고 제안했는데 튕겼다. 고치기엔 이미 여기 맞춰 쓴 코드들이 너무 많아서 못 바꾸고 있다고.

객체

속성의 컬렉션. 객체는 hip 구역에 메모리를 할당받아 올라간다. 원시타입 아니면 다 객체이다.

두 가지 방식으로 선언 가능.

let user = new Object();
let user = {};

모든 객체는 prototype 속성을 가지며, 객체가 사용되기 위하여 생성되는 prototype을 참조해둔다. (JS는 프로토타입을 복사하여 객체를 생성하는 방식의 언어라서) 객체는 관련된 프로퍼티와 메소드의 집합으로, 키와 값을 가지는 값들로 구성된다.

const person = {
  name: ['Bob', 'Smith'],
  age: 32,
  gender: 'male',
  interests: ['music', 'skiing'],
  bio: function() {
    alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.');
  },
  greeting: function() {
    alert('Hi! I\'m ' + this.name[0] + '.');
  }
};

Array

index를 키로 가진다. {}가 아니라 []를 사용하여 선언한다. typeof에서 Array까지는 구분을 해준다.

Function

대표적인 객체라고 보긴 힘들지만 js에서 중요한 속성 중 하나이다. function은 객체이다. 다른 객체처럼 프로퍼티와 메소드를 가지며(생각해보면...), 호출 가능하다는 점만 추가된다.

1급 객체라고 불리는데,
1. 변수나 데이타에 할당 할 수 있으며
2. 객체의 인자로 넘길 수 있다
3. 객체의 리턴값으로 리턴 할 수 있다
+무명의 리터럴로 표현이 가능하다.

JS 쓰다보면 당연하게 쓰게 되는데, 다른 언어와 비교하면 특이하다. java에서는 불가능하고 kotlin에서는 가능하다.

JS의 호이스팅으로 인하여 함수 또한 호이스팅 되는데, 변수와 분리되어 호이스팅 된다. 근데 변수에 할당하면 호이스팅에서 제외된다.

참고 자료

https://developer.mozilla.org/ko/docs/Learn/JavaScript/Objects/Basics
https://curryyou.tistory.com/183
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/null
https://2ality.com/2013/10/typeof-null.html
https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures

profile
미래엔 햄스터를 다운 받을 수 있겠지? 설치류니까...

0개의 댓글