Promise가 어렵다면 그보다 쉽게 쓸 수 있는 ES8 문법
async function 더하기(){ // 그냥 간단하게 함수앞에 async만 붙이면 된다.
var 어려운연산 = new Promise((성공, 실패)=>{
실패();
});
try { var 결과 = await 어려운연산 } //await은 무조건 async 함수 내부에서 사용해야 한다.
catch { 어려운연산 Promise가 실패할 경우 실행할 코드 } //실패할 경우를 대비해, catch문 이용
}
더하기() //함수 호출
<button>을 누르면 성공하는 Promise 만들기
<body>
<button id="test">버튼</button>
</body>
<script>
var 프로미스 = new Promise(function(성공, 실패){ //버튼을 클릭하면 성공으로
document.getElementById('test').addEventListener('click', function(){
성공('성공했어요');
});
})
async function 버튼누르기(){ //함수에 async 사용
try{
var 결과 = await 프로미스; //프로미스로 넘어가서 await으로 기다려준다.
console.log(결과); //성공했어요 출력
} catch { console.log('실패했어요'); } //실패했을 경우
}
버튼누르기(); //함수 호출
</script>
반복문의 용도(for, forEach 포함)
Object에 사용한다.
var 오브젝트 = { name : 'Kim', age : 30 };
for (var key in 오브젝트) { //내부 데이터 갯수만큼, 반복할 때마다 key라는 변수는 name, age이다.
console.log(오브젝트[key]); //key를 []에 넣어서 사용, key를 이렇게 .점 찍고는 사용을 못한다.
}
var 오브젝트 = { name : 'Kim' }; //{ name : 'Kim' } 이걸 저장하면 Kim 이라는 자료만 달랑 저장되는게 아니라, Kim과 함께 비밀스러운 속성들 3개가 true로 저장된다.
console.log( Object.getOwnPropertyDescriptor(오브젝트, 'name') ); //{value: "Kim", writable: true, enumerable: true, configurable: true} 출력
class 부모 {
}
부모.prototype.name = 'Park';
var 오브젝트 = new 부모();
for (var key in 오브젝트) {
if (오브젝트.hasOwnProperty(key)) // Park이 싫다면, 오브젝트가 이 key값을 직접 가지고 있냐라고 조건문을 단다. 그래서 오브젝트가 가진 것만 반복시키고 싶으면 이걸 꼭 써야한다.
console.log(오브젝트[key]); //Park을 출력하지 않는다. 부모만 가지고 있고 오브젝트는 없기때문이다.
}
array, 문자, arguments, NodeList, Map, Set에 사용한다.
var 어레이 = [2,3,4,5];
for (var 자료 of 어레이) {
console.log(자료);
}
iterable - Symbol.iterator 이라는 일종의 메소드를 가지고 있는 자료형들을 뜻한다.
var 어레이 = [2,3,4,5];
console.log( 어레이[Symbol.iterator]() ); // 깊게 이해는 하지말고, 이걸 가지고 있으면 for of 반복문을 쓸 수 있구나~라고 알고 있자.
document.getElementsByClassName()이나 document.querySelectorAll() 이런 셀렉터로 찾은 요소들이 [] 대괄호안에 담겨오는데 array는 아니고 NodeList라는 자료형이라고 부른다.
HTML요소들을 하나씩 꺼내서 처리할 때, 매우 자주 쓸 수 있는 반복문이라고 보면된다.(하지만 for of의 호환성 주의)
예시1. 구구단
let 데이터 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for (let 자료1 of 데이터) {
for (let 자료2 of 데이터) {
console.log(`${자료1}*${자료2} = ${자료1*자료2}`) //1*1 = 1 부터 9*9 = 81까지 출력
}
}
예시2. key들의 마지막 숫자 떼버리기
처음부터 반복문 돌리는게 익숙치않다면, 하나만 하드코딩해보자. 그리고 그걸 반복문돌리는게 훨씬 쉽다.
var products = [{
name1: 'chair',
price1: 7000
},
{
name2: 'sofa',
price: 5000
},
{
name1: 'desk',
price3: 9000
},
];
for (let array of products) // array라서 for of
for (let key in array) { // object라서 for in
let value = array[key]; //일단 데이터 값을 따로 저장하고
newKey = key.slice(0, -1); //기존 key의 마지막 숫자를 떼버린다.
array[newKey] = value; //새로운 key에 데이터 다시 저장
delete array[key] //기존 key들은 없앤다.
}
console.log(products)