for in 의 단점
먼저 객체의 한 종류인 배열을 순환하는 for문인 for in 을 알아보겠습니다.
var data = [1,2,undefined,NaN,null,""];
Array.prototype.getIndex = function(){};
for(let idx in data) {
console.log(data[idx]);
}
결과 출력문을 예상하면 data에 들어있는 1, 2, undefined, NaN, null, "" 만 출력되어야 할 것 같은데
실제로 출력해보면
마지막에 함수도 찍히게 됩니다. Array의 프로토타입으로 getIndex이름의 함수를 추가해주었기 때문인데요.
for in은 prototype으로 상위에 추가된(상위는 Array객체) 객체들까지도 나타내게 됩니다.
이러한 위험성 때문에 for in 대신 for of 로 배열을 순환합니다.
for of
var data = [1,2,undefined,NaN,null,""];
Array.prototype.getIndex = function(){};
for(let value of data) {
console.log(value);
}
결과를 확인하면 for in에서 출력된 getIndex의 함수가 나오지 않았습니다.
또, for in 에서는 index를 받았지만 for of 에서는 배열의 각 값을 하나로 보고 출력합니다.
배열 뿐만 아니라 문자열 순환에도 유용합니다.
var str = "hello world~~";
for (let value of str) {
console.log(value);
}
이렇게 공백까지도 잘 순환하여 문자 단위로 출력됩니다.
'Javascript' 카테고리의 다른 글
[JS/ES6] from 메서드 (진짜 배열 만들기) (0) | 2019.02.03 |
---|---|
[JS/ES6] spread operator (0) | 2019.02.03 |
[JS/ES6] 추가된 String의 메서드들 (0) | 2019.02.02 |
[JS] 클로저(closure) (0) | 2019.02.02 |
[Javascript/JQuery] radio checked value 값 알아내기 (0) | 2018.10.28 |