// Object
// Object 같은 Key 사용
/*
ES3 key값이 같더라도 추가
ES5 strict 모드에서는 에러
ES6 strict 모드와 관계없이 에러발생하지않으며 마지막값으로 대체
*/
let sameKey = {one : 1, one:2};
console.log(sameKey); // {one: 1}
// 변수 이름으로 값 설정
let one = 1, two =2;
let values = {one, two};
console.log(values); // {one: 1, two: 2}
// Object에 function 작성
// ES6
let obj = {
getTotal(param) {
return param+123;
}
};
/*
ES5
let obj = {
getTotal : function (param) {
return param+123;
}
};
*/
console.log(obj.getTotal(400)); // 523
// es6 getter / setter
obj = {
value : 100,
get getValue(){
return this.value;
},
set setValue(value){
this.value = value;
}
};
console.log(obj.getValue); // 100
obj.setValue = 200;
console.log(obj.getValue); // 200
/*
// es5 getter / setter
var obj2={value : "책"}
Object.defineProperty(obj2, "book", {
get : function(){
return this.value;
},
set : function(param){
this.value = param;
}
});
console.log(obj2.book);
obj2.book = "과목";
console.log(obj2.book);
*/
// is() : 값과 값 타입 비교
// Object.is(any, any) -> return Boolean type
/*
=== 값과 값 타입을 모두 비교
== 값 타입은 비교하지 않고 값만 비교
Object.is() 값과 값 타입을 모두 비교
*/
console.log("1:",Object.is(NaN, NaN), NaN===NaN); // 1: true false
console.log("2:",Object.is(NaN, 0/0), NaN===0/0); // 2: true false
console.log("3:",Object.is(null, null), null==null); // 3: true true
console.log("3:",Object.is(undefined, null), undefined==null); // 3: false true
// assign() : 오브젝트 프로퍼티 복사
// Object.assign(any1, any2)
// any1 : traget, 열거가능오브젝트
// any2 : (선택)sources, 열거가능오브젝트, 다수지정가능
let sports = {
event:"축구",
player:11
};
// es5
let dup1 = {};
for(var key in sports){
dup1[key] = sports[key];
}
sports.player=12;
console.log(dup1.player); // 11
// es6
let dup2 = Object.assign({}, sports);
sports.player=13;
console.log(dup2.player); // 12
// ------------------
// assign() 고려사항
oneObj = {one:1}, twoObj = {two:2};
let mergeObj = Object.assign(oneObj, twoObj);
console.log(Object.is(oneObj, mergeObj)); // true
mergeObj.one = 456;
console.log(Object.is(oneObj, mergeObj)); // false
// oneObj와 twoObj는 분리되었지만 oneObj와 mergeObj는 연동되어있음
obj = {one:1};
Object.assign(obj, {two:2},{two:3}, {four:4}); // 후순위인 two:3가 반영
for(var pty in obj){
console.log(pty, obj[pty]);
/*
one 1
two 3
four 4
*/
};
let count = {
current : 1,
get getCount(){
return ++this.current;
}
};
mergeObj = {};
Object.assign(mergeObj, count);
/*
current : 1 을 반영하고
getCount는 복사하지 않고 호출한다. 그러므로 getCount : 2가 됨
*/
console.log(mergeObj); // {current: 1, getCount: 2}
반응형
'WEB > ECMAScript' 카테고리의 다른 글
Math 오브젝트 / String Object (0) | 2020.02.25 |
---|---|
Number 오브젝트 (0) | 2020.02.25 |
Destructuring Assignment (0) | 2020.02.20 |
Array Function (0) | 2020.02.20 |
let / const / function / for / try~catch (0) | 2020.02.19 |