const result = Object.is(10, "10");
log(result);
const one = {}, two = {};
log(Object.is(one, two));
// false
// false
오브젝트 비교 목적이 아님
JS 값 비교 방법
log((undefined == null));
log((undefined === null));
log(Object.is(undefined, null));
// true
// false
// false
log((NaN === NaN));
log(Object.is(NaN, NaN));
log((NaN === 0 / 0));
log(Object.is(NaN, 0 / 0));
// false
// true
// false
// true
2) +0과 -0 비교
log((0 === -0));
log(Obejct.is(0, -0));
// true
// false
function check(data){
if (Obejct.is(typeof data, "object")){
log(data);
} else {
log("object 타입이 아님");
};
};
check({value: 10});
check(200);
// {value: 10}
// object 타입이 아님
const sports = {
event: "축구",
player: 11
};
let dup = {};
Object.assgin(dup, sports);
log(dup);
// {event: 축구, player: 11}
try {
const obj = Object.assign(null, {});
} catch (e) {
log("null 작성 불가");
};
// null 작성 불가
const obj = Object.assign(100);
log(obj.valueOf());
// 100
let obj = {};
Object.assign(obj, {ten: 10});
log(obj);
const one = Object.create({}, {
book: {value: 100, numerable: false},
sports: {value: 200, enumberable: true}
});
Object.assign(obj, one);
log(obj);
// {ten: 10}
// {ten: 10, sports: 200}
const book = {title: "책"};
const sports = {item: "축구"};
const obj = Object.assign({}, book, sports);
log(obj);
// {title: 책, item: 축구}
let obj = {ten: 10};
Object.assign(obj, undefined, null, 200);
log(obj);
const one = {un: undefined, nu: null};
Object.assign(obj, one);
log(obj);
// {ten: 10}
// {ten: 10, un: undefined, nu: null}
const obj = Object.assign(100, {book: 200});
log(obj.valueOf());
log(obj.book);
// 100
// 200
const sports = {
iten: "축구"
};
let copy = sports;
sports.item = "농구";
log(copy.item);
// 농구
const sports = {
item: "축구";
};
let copy = {};
Object.assign(copy, sports);
sports.item = "농구";
log(copy.item);
// 축구
const book = {
item: {title: "자바스크립트"}
};
let copy = {};
Object.assign(copy, book);
copy.item.title = "책";
log(book.item.title);
// 책
const book = {
item: title: "자바스크립트"}
};
let copy = {};
for (let key in book){
let value = book[key];
copy[key] = {};
for (let name in value){
copy[key][name] = value[name];
};
};
book.item.title = "책";
log(copy.item.title);
// 자바스크립트
const book = {
item: {title: "자바스크립트"}
};
const copy = JSON.parse(JSON.stringify(book));
book.item.title = "책";
log(copy.item.title);
// 자바스크립트
const obj = {music: "음악", book: "책"};
const list = Object.entries(obj);
for (let keyValue of list){
log(keyValue);
};
// [music, 음악]
// [book, 책]
const obj = {10: "십", book: "책", 7: "칠"};
const list = Object.entries(obj);
for (let keyValue of list){
log(keyValue);
};
// [7, 칠]
// [10, 십]
// [book, 책]
const list = Object.entries("ABC");
for (let keyValue of list){
log(keyValue);
};
// [0, A]
// [1, B]
// [2, C]
const obj = {music: "음악", book: "책"};
const list = Object.values(obj);
for (let value of list){
log(value);
};
// 음악
// 책
const obj = {10:"십", book:"책", 7:"칠"};
const list = Object.values(obj);
for (let value of list){
log(value);
};
// 칠
// 십
// 책
const list = Object.values("ABC");
for (let value of list){
log(value);
};
// A
// B
// C
const list = [["one", 10], ["two", 20]];
const obj = Object.fromEntries(list);
log(obj);
// {one: 10, two: 20}
const list = [["one", 10], ["one", 20]];
const obj = Object.fromEntries(list);
log(obj);
// {one: 20}
const obj = {music: "음악"};
const des = Object.getOwnPropertyDescriptors(obj);
for (let name in des.music){
log(name + ": " + des.music[name]);
};
// value: 음악
// writable: true
// enumerable: true
// configurable: true
2) 악세스 디스크립터
const obj = {
get music(){}
};
const des = Object.getOwnPropertyDescriptor(obj);
for (let name in des.music){
log(name + ": " + des.music[name]);
};
// get: get music(){}
// set: undefined
// enumerable: true
// configurable: true
prototype과 __proto__
에 연결된 메소드를 호출하는 방법이 다름
prototype에 연결된 메소드 호출
function Book(){
this.point = 100;
};
Book.prototype.getPoint = function(){
log(Object.is(this, Book.prototype));
return this.point;
};
log(Book.prototype.getPoint());
log(Book.prototype.getPoint.call(Book));
// true
// undefined
// false
// undefined
__proto__
에 연결된 메소드 호출new 연산자로 인스턴스를 생성하고
인스턴스에 추가한 수의 인스턴스 구조
__proto__
에 메소드 추가__proto__
에 function을 추가하면
__proto__
에 추가한 후의 prototype 모습추가한 메소드를 인스턴스에 공유
__proto__
에let obj = {0: 10, length: 1};
Object.setPrototypeOf(obj, Array.prototype);
첫 번째 파라미터에 인스턴스 작성
ES5에 getPrototypeOf()가 있음
첫 번째 파라미터에 prototype 작성
첫 번째 파라미터의 prototype에
prototype 연결 후의 인스턴스 구조
상속을 위한 목적이라면