1. 모든 데이터는 json으로 저장된다고 생각해라

    예를 들어서 형 string 변수가 있다고 해도 실제로 까보면 java의 string 클래스나 C 계열의 array 형태가 아니라 아래처럼 생겨먹었음

0: "t"

1: "e"

2: "s"

3: "t"

length: 4

[[Prototype]]: String

[[PrimitiveValue]]: "test"

    걍 json(정확히는 Object형)으로 생겨먹었다고 생각하면 prototype 상속같은 뭔가 이질적인 동작도 대충 이해가 됨 ㅇㅇ


2. JS는 기성 언어와 class/function/variable 체계가 다르다

    예를 들면 class는 function의 일종임

    그래서 아래와 같이 function과 class를 거의 동일하게 사용하는것도 가능함 내부적으로

class TodoModel { // class 선언

  constructor(data) {

    this.todos = [];

    this.data = data;

  }

    

  addData() {

    console.log(`${data} addData`); 

  }


  add() { console.log('add'); }

}


const todoModel = new TodoModel('input');

todoModel.addData();

function TodoModel(data){ // function 선언

  const todos = [];


  function addData() {

    console.log(`${data} addData`);

  }


  function add() { console.log('add'); }


  return Object.freeze({

    addData,

  });

}


const todoModel = new TodoModel('input');

todoModel.addData();

    근데 더 웃긴건 1번의 내용과 어느정도 일맥상통하는 얘긴데 까보면 사실 둘 다 Object형의 variable이라는거임 ㅇㅇ

console.log(new TodoModel())

> 대충 prototype: Object 어쩌고 나옴

    한 마디로 class고 function이고 하는 것들은 단지 "특별한 Object 변수" 이상도 이하도 아님 그래서 object형과 동일하게 사용 하는것이 가능함


3. JS의 =는 기본적으로 pointer를 넘긴다.

    아래와 같은 경우

a = {n: 0}

b = a

b.n=10

console.log(a)

    {n:10}이 출력된다 ㅇㅇ

    왜 ㅇㅈㄹ이냐면 "="의 의미가 다른 기성 언어들과 조금 달라서 그럼

    JS에서의 =는 "값을 복사"가 아닌 "해당 변수 참조"라고 이해 하면 된다.

    위의 예제를 보면 b는 a를 참조하고, b.n은 곧 a.n을 의미하는것과 동일하다는 말임