// Destructuring Assignment
let one, two, three, four, other;
function init() {
[one,two,three,four]=[0,0,0,0];
}
[one, two] = [1,2];
console.log(one,two); // 1 2
init();
[one, two, [three, four]] = [1,2,[3,4]];
console.log(one,two,three,four); // 1 2 3 4
init();
[one, , , four] = [1,2,3,4];
console.log(one,two,three,four); //1 0 0 4
init();
[one, ...other] = [1,2,3,4];
console.log(one,"/",other); // 1 "/" (3) [2, 3, 4]
let {v1, v2} = {v1 : 3, v5 : 6};
console.log(v1, v2); // 3 undefined
let v3, v4;
({v3, v4} = {v3:9, v4:12});
console.log(v3, v4); // 9 12
let {v5, plus : {v6}} = {v5 : 15, plus: {v6 : 18}};
console.log(v5, v6); // 15 18
function total({one, plus:{two,five}}) {
return one+two+five;
}
let res1 = total({one:1, plus:{two:2, five:5}});
console.log(res1); // 8
// ---------------
// 오퍼레이션
// Computed property name
let item = "apple";
let sports3 = {
[item]:1,
[item + "game"]:2,
[item + "Method"](){
return this[item];
}
};
console.log(sports3.apple); // 1
console.log(sports3.applegame); // 2
console.log(sports3.appleMethod()); // 1
// ---------------
// Default Value
let [v7, v8, v9 = 3] = [1,2];
console.log(v9); // 3
[v7, v8, v9 = 3] = [1,2,5];
console.log(v9); // 5
let {v10, v12 = 3} = {v10:11};
console.log(v10, v12); // 11 3
let [v13, v14=v13*2, v15=v14*2] = [3];
console.log(v13, v14, v15); // 3 6 12
// Default parameter
let v16 = (p1, p2=10) => p1+p2;
console.log(v16(1)); // 11
console.log(v16(1,undefined)); // 11
console.log(v16(1,3)); // 4
let v17 = ([p1,p2] = [1,2]) => p1+p2;
console.log(v17()); // 3
let v18 = ({p3:value} = {p3:3})=> value;
console.log(v18()); // 3
// ------------------
// for -of
for(var value of [10,20,30]){
console.log(value);
}
for(var value of "ABC"){
console.log(value);
/*
A
B
C
*/
}
/*
let nodes = document.querySelectorAll("li");
for(var node of nodes){
console.log(node.textContent);
}
*/
let values = [
{item:"과목1", amount:{apple:10, candy:20}},
{item:"과목2", amount:{apple:150, candy:200}}
];
for(var {item: vone, amount: {apple:vtwo, candy:vfive}} of values){
console.log(vone, vtwo, vfive);
/*
과목1 10 20
과목2 150 200
*/
};
/*
for-in 문의 대상은 Object 오브젝트이며 열거 가능한 프로퍼티가 대상
즉, 프로퍼티의 enumerable 속성 값이 false이면 반복에서 제외된다.
for-of문의 대상은 이터러블 오브젝트이며 prototype에 연결된 프로퍼티는 대상이 아니다.
*/
values = [10,30,50];
Array.prototype.music = function () {
return "과목1";
};
Object.prototype.sports = function () {
return "과목2";
};
for(var key in values){
console.log(key, values[key]);
/*
0 10
1 30
2 50
music ƒ () {
return "과목1";
}
sports ƒ () {
return "과목2";
}
*/
};
console.log("아래부터는 for-of");
for(var value of values){ // prototype에 연결된 프로퍼티가 열거되지 않는다.
console.log(value);
/*
10
30
50
*/
};
console.log(values.music()); // values.__proto__와 Array.prototype이 연동되서 호출가능
// 과목1
console.log(values.sports()); // values.__proto__.__proto__와 Object.prototype이 연동되서 호출가능
// 과목2
// for-of로 Object 열거
// Object 오브젝트는 이터러블 오브젝트가 아니므로 for-of문으로 열거할 수 없다.
// 개발자코드로 사전처리를 하면 for-of문으로 열거가능
let sports = {
soccer : "축구",
baseball : "야구"
};
let keyList = Object.keys(sports); // 파라미터의 sports 오브젝트에서 프로퍼티 키를 배열로 반환
// 배열은 이터러블 오브젝트이므로 for-of문으로 반보갛면서 sports[key]형태로 프로퍼티값을 구할수 있다.
for(var key of keyList){
console.log(key, sports[key]);
/*
soccer 축구
baseball 야구
*/
}
/*
Object.keys로 따로 안구하고 바로 출력할때 아래와같은 오류발생
for(var value of sports){ // Uncaught TypeError: sports is not iterable
console.log(value);
}
*/
// 거듭제곱연산자(Exponentiation)
console.log(3**2); // 9
console.log(Math.pow(3,2)); // 9
반응형
'WEB > ECMAScript' 카테고리의 다른 글
Math 오브젝트 / String Object (0) | 2020.02.25 |
---|---|
Number 오브젝트 (0) | 2020.02.25 |
Object - function 작성, assign(), is() (0) | 2020.02.23 |
Array Function (0) | 2020.02.20 |
let / const / function / for / try~catch (0) | 2020.02.19 |