새로운 인사이트
Math.min.apply(null, arr)
를 이용해서 배열의 최소값을 구할 수 있다.<출처-JS 100제 문제69>
https://www.notion.so/69-331772b4b3ab48e2895bf7d609fe590f
user
가 객체를 참조하고 let admin = user;
라는 코드를 실행한다면 변수 admin
는 그 객체의 사본이 아니라 같은 객체를 참조한다. 그래서 변수 admin
를 통해 객체를 수정하면 그 결과는 변수 user
에도 똑같이 적용된다.<이미지 출처>
https://ko.javascript.info/object-copy
객체를 생성하는 방법 3가지
new
키워드Object.create()
함수예제
let empty = {}; // 프로퍼티가 없는 객체
let point = { x: 0, y: 0, } // 숫자 프로퍼티 두 개
new
연산자는 새 객체를 생성하고 초기화한다.new
키워드 뒤에는 꼭 함수 호출이 있어야 한다.예제
let o = new Object(); // 빈 객체를 만든다. {}와 같다.
let a = new Array(); // 빈 배열을 만든다. []와 같다.
let d = new Date(); // 현재 시간을 나타내는 Date 객체를 만든다.
let r = new Map(); // 키와 값을 연결하는 Map 객체를 만든다.
Object.create()
는 첫 번째 인자를 프로토타입 삼아 새 객체를 생성함.null
을 전달해 프로토타입이 없는 객체를 생성할 수도 있지만, 객체는 아무것도 상속하지 않아 기본 메서드가 아예 없다. + 연산자와 함께 사용할 수도 없다.new Object
와 같이 빈 객체를 만들고 싶을 때는 Object.prototype
을 전달하면 된다.let o3 = Object.create(Object.prototype); // o3은 {}나 new Object()와 같다.
Object.create()
를 사용하는 목적 중 하나는 서드 파티 라이브러리에서 객체를 변경하는 사고를 막는 것이다. 객체를 라이브러리 함수에 전달하지 않고 원래 객체를 상속하는 객체를 전달하면, 그 함수는 아무 문제 없이 상속된 값을 읽을 수 있다. 라이브러리에서 프로퍼티 값을 바꾸더라도 원래 객체에는 영향이 없다.Object.prototype
이라는 코드로 참조할 수 있다.new
키워드와 생성자를 사용해 만든 객체는 생성자 함수의 프로토타입 프로퍼티 값을 자신의 프로토타입으로 사용한다.new Object()
로 생성한 객체는 Object.prototype
에서 상속.new Array()
로 생성한 객체는 Array.prototype
에서 상속.new Date()
로 생성한 객체는 Date.prototype
에서 상속.object.key
로 object
의 프로퍼티를 생성하거나 값을 가져올 수 있다.object["key"]
로 object
의 프로퍼티를 생성하거나 값을 가져올 수 있다.문자열을 인덱스로 사용하는 배열을 연관 배열(associative array)이라고 한다.
let addr = "";
for(let i = 0; i < 4; i++) {
addr += customer[`address${i}`] + "\n";
}
이 코드는 customer 객체의 address0, address1, address2, address3 프로퍼티를 읽어 병합한다.
객체
o
의x
프로퍼티를 가져온다고 가정할 때
o
에 x
라는 자체 프로퍼티가 없다면 -> o
의 프로토타입 객체에서 x
프로퍼티를 검색. -> 프로토타입의 자체 프로퍼티에도 없고 프로토타입의 프로토타입이 있다면 프로토타입의 프로토타입에서 해당 프로퍼티를 검색한다.
쭉 검색하다 x
프로퍼티를 찾거나, 프로토타입이 null
인 객체에 도달할 때까지 검색을 계속함.
객체의 프로토타입 속성은 자신이 어디에서 프로퍼티를 상속했는지 나타내는 체인을 형성함. 타고타고 들어가...
객체
o
의x
프로퍼티에 값을 할당하려고 할 때
객체 o
의 x
프로퍼티가 자체 프로퍼티로 존재한다면 값을 바꿀것이고,
객체 o
의 x
프로퍼티가 자체 프로퍼티로 존재하지 않는다면 x
프로퍼티를 새로 만들고 거기에 할당한다.
만약 객체 o
에 상속된 프로퍼티 중 x
가 있었다면, 상속된 프로퍼티는 새로 생성된 자체 프로퍼티에 '가려진다'.
예제
delete book.author; // book 객체에 author 프로퍼티를 삭제함.
delete book["main title"] // book 객체에 "main title" 프로퍼티를 삭제함.