from()
새로운 Array 오브젝트 생성, 반환
콜백함수에서 반환된 값을 엘리먼트에 설정
두번째 파라미터는 선택으로 함수작성
- 첫번째 파라미터의 이터러블 오브젝트를 전개할 때마다 호출
세번째 파라미터 선택
- 호출된함수에서 this로 참조할 오브젝트
let arrayLike = {0: “zero”, 1: “one”, length :2 };
let arrayObj = Array.from(arrayLike);
[“zero”,”one”]
of()
Array 인스턴스를 생성하여 반환
파라미터 값을 생성한 배열에 설정
콤마로 구분하여 다수 작성 가능
- let list = Array.of()
copyWithin()
지정한 인덱스 범위를 복사하여 같은 배열의 첫 번째 파라미터 인덱스에 설정
복사기준
두번째 파라미터 인덱스 부터
세번째 파라미터 인덱스 직전까지 복사
fill()
인덱스 범위의 값을 지정한 값으로 바꾸어 반환
entries()
Array로 이터레이터 오브젝트를 생성하여 반환
Array는 이터러블 오브젝트 지만
이터레이터 오브젝트는 아님, next() 사용 불가
이터레이터 오브젝트는 key : value 형태
배열 인덱스가 key가 되고 값이 value
let values = [ 1 , 2, 3]
let ite = values.entries()
ite.next() // 2
for (let [key,value] of ite) {
}
key()
Array로 이터레이터 오브젝트를 생성하여 반환
이터레이터 오브젝트에 key만 존재
배열 인덱스가 key 값이 됨
배열 엘리먼트 값(value)은 이터레이터에 포함되지 않음
values()
Array로 이터레이터 오브젝트를 생성하여 반환
이터레이터 오브젝트는 values만가짐
크롬 51/50 에서 실행 52 에러
find()
콜백 함수에서 처리중인 값반환
find 방법
배열 엘리먼트를 하나씩 읽어가면서 콜백 함수 호출
콜백 함수에서 true를 반환하면 find() 종료
이때 처리중인 엘리먼트 값 반환
배열 끝까지 true를 반환 하지 않으면 undefined
배열 엘리먼트 , 인덱스, 배열전체
let result = [1,2,3].find(value, index, allData) => value === 2 );
//2
function* 함수
yield
제네레이터 함수
prototype: Generator
__proto__ : Generator
constructor : GeneratorFunction
next: function next()
return: function return()
throw: function throw()
let getConst = Object.getPrototypeOf(function *(){}).constructor;
제네레이터 오브젝트 생성
prototype에 연결되어 있는 constructor 반환
따라서 getConst는 생성자 함수가 됨
yield
[returnValue] = yield[expression]
result = yield 10 + 20
yield 키워드
제너레이터 함수를 멈추거나 재실행 기준으로 사용
오른쪽의 표현식을 평가하여 결과 반환
표현식을 작성하지 않으면 undefined 반환
[returnValue]
- 오른쪽의 평가 결과가 설정되는 것이 아니라 다음 next()의 파라미터 값이 설정
yield 표현식 평가를 완료하면
{value: 값, done: true/false} 형태로 반환
value 프로퍼티 값
yield 푠현식의 평가 결과 설정
yield를 수행하지 못하면 undefined
done 프로퍼티 값
- yield를 수행하면 false
function* sports(one) {
yield one;
let check 10;
}
let getObj = sports(10);
//{value:10,done:false}
//{value:10,done:true}
next()
제너레이터 함수에서 yield 단위로 실행
next()를 호출하면
파라미터 값을 yield의 왼쪽 변수에 할당
앞 yield의 다음 라인 부터 yield의 표현식까지 수행
return 문을 만나면 done : true
함수는 호출할때마다 변수에 초깃값 설정
제네레이터 함수
제네레이터 오브젝트를 생성할 때 초깃값 설정
next()로 실행될 때마다 초깃값을 설정하지 않음
// 예제
let getAmount = function*(qty,price){
let amount = Math.floor(qty * price);
let discount = yield amount;
return amount = discount;
};
let getDiscount = function*(amount){
return amount > 1000 ? amount * 0.2 : amount * 0.1;
};
let amountObj = getAmount(10,60);
let result = amountObj.next();
console.log(result);
let dcAmount = getDiscount(result.value);
console.log(dcAmount);
console.log(amountObj.next(dcAmount));
next() 다양한 형태
- 함수에 다수의 yield를 작성하지 않고 while() 문에 yield 작성
let gen = function*(value) {
let count = 0;
while (value) {
yield ++count;
}
}
let getObj = gen(true);
- 파라미터 값을 받을 변수가 없으면 파라미터로 넘겨준 값 반환
return()
제네레이터 함수의 이터레이터를 종료시킴
{done:true} 반환
throw()
Error를 발생 시킴
제네레이터 함수의 catch문에서 받아줌
yield*
yield*[[표현식]]
yield* 배열,함수