
let obj = {
  name: "병건",
  age: 28,
};let obj = new Object();
obj.name = "병건";
obj.age = 28;자바스크립트에는 7개의 원시타입(primitive)이 존재한다. 이러한 단순 원시 타입은 객체가 아니다. 따라서 "자바스크립트는 모든 것이 객체다." 라는 말은 사실이 아니다.
typeof null === object //=> true인 것은 자바스크립트의 오랜 버그다. "단순" 원시타입은 객체가 아니다.내장 객체라는 객체 하위 타입이 있다.
new키워드와 함께 각각 하위 객체를 생성하는 생성자들이다.var primitiveStr = "단순 원시 문자열";
var objectStr = new String("문자열 객체");
console.log(typeof primitiveStr); //=> string
console.log(typeof objectStr); //=> object
console.log(primitiveStr instanceof String); //=> false
console.log(objectStr instanceof String); //=> true"단순 원시 문자열"이라는 원시 값은 객체가 아니라 원시 리터럴이며 불변값이다.우리는 재할당을 const로 방지하려고 한다. 그러나 객체에서 const는 얕은 불변성만을 제공한다.
const obj = {
  name: "조병건",
  age: 28,
};
// obj = {}  !!Error
obj.name = "병건";const는 객체에게 얕은 불변성만을 제공해준다는 것이다.Object.defineProperties 써서 원하는 프로퍼티를 불변하게 만들 수 있다.
writable : falseconfigurable : falsevar obj = {};
Object.defineProperties(obj, {
  name: {
    value: "조병건",
    writable: false,
    configurable: false,
  },
  age: {
    value: 28,
    writable: true,
  },
});
obj.name = "asdasd"; //error가 나진 않음
console.log(obj.name); //변경되지 않음
obj.age = 9999;
console.log(obj.age); //변경됨Object.preventExtensions를 사용하면, 해당 object의 프로퍼티 확장이 불가능해진다.var obj = {
  name: "조병건",
};
Object.preventExtensions(obj);
obj.age = 28;
console.log(obj.age); //=> undefined말 그대로 객체를 "봉인"시킨다. seal()은 다음과 같은 작업을 한다.
Object.preventExtentions()configurable = false 모든 프로퍼티에 configurable을 false로 만든다.말 그대로 객체를 "동결"시킨다. 객체를 확장할 수도 없고, 프로퍼티의 값을 변경시킬 수도 없다. 반면, 객체를 재할당 하는 것은 가능하다. 재할당의 방지는 const가 해주는 것이기 때문이다.
var obj = {
  name: "병건",
  age: 28,
};
obj.a = 123;
obj.name = "asdasdasd";
console.log(obj); // 그대로다.
obj = {};
console.log(obj); // {}freeze 내부에 객체가 존재할 수 있다. freeze를 하게되면 객체 내부에 참조하고 있는 객체들을 모두 "동결"시키기 때문에(Deep freeze), 작성한 코드가 동작 안할 수 있으므로 주의하자.