>  기사  >  웹 프론트엔드  >  for in 루프와 js의 for 루프의 차이점은 무엇입니까?

for in 루프와 js의 for 루프의 차이점은 무엇입니까?

一个新手
一个新手원래의
2017-09-09 13:04:161923검색

JavaScript for...in 문

for...in 문은 배열이나 객체의 속성을 반복하는 데 사용됩니다.

for ... in 루프의 코드가 실행될 때마다 배열의 요소나 객체의 속성에 대해 작동합니다.

팁: for-in 루프는 배열이 아닌 객체를 탐색하는 데 사용해야 합니다. for-in을 루프에 사용하는 것을 "열거"라고도 합니다. ·

구문: ​​

for (变量 in 对象)
{    在此执行代码}

"변수"는 변수를 지정하는 데 사용됩니다. 지정된 변수는 개체의 배열 요소 또는 속성일 수 있습니다.

예: for ... in을 사용하여 배열을 반복합니다.

<html><body><script type="text/javascript">var x
var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2] = "BMW"
for (x in mycars)
{
document.write(mycars[x] + "<br />")
}</script></body></html>

참고 1: for in 루프는 속성의 첨자에 따라 출력을 정렬하지 않습니다.

//code from http://caibaojian.com/js-loop-for-in.html"first":"first",   "zoo":"zoo",  "2":"2",  "34":"34",  "1":"1",  "second":"second"};for (var i in obj) { console.log(i); };输出:1234firstzoosecond

실행할 때 크롬을 눌러 실행하세요. 먼저 음수가 아닌 정수 키를 추출하고 출력을 정렬한 다음 정의된 순서대로 나머지를 출력합니다. 이 이상한 설정으로 인해 avalon의 ms-with 개체 정렬이 예상대로 출력되지 않습니다. 사용자가 순수한 숫자로 키 이름을 정의하지 않도록 강제할 수만 있습니다.

예제 1: 배열의 프로토타입 객체에 새 속성이 정의되었으며 for 루프를 사용하는 데 문제가 없었습니다

function getNewArray(){var array=[1,2,3,4,5];Array.prototype.age=13;
var result = [];for(var i=0;i<array.length;i++){
result.push(array[i]);
}alert(result.join(''));
}

예제 2: for in 루프가 사용되었지만 여전히 12345라는 올바른 결과를 얻었습니다. 우리는 예상했습니다

function getArrayTwo(){var array=[1,2,3,4,5 ];
var result=[];
for(var i in array){
result.push(array[i]);
}alert(result.join(''));
}

예제 3: 프로토타입에 속성을 추가한 후 기본적으로 열거되고 최종적으로 1234513

function getNewArrayTwo(){var array=[1,2,3,4,5 ];
Array.prototype.age=13;var result=[];
for(var i in array){
result.push(array[i]);
}alert(result.join(''));
}

을 출력하므로 실제로 High Performance 책에서는 배열에서 for in 루프를 수행하지 않는 것이 좋습니다. JavaScript의 for in도 강조됩니다. 루핑은 프로토타입에 속성이 있는지 확인하기 위해 항상 객체의 프로토타입에 액세스하여 순회에 부주의한 추가 압력을 가하기 때문에 좋지 않습니다.

해결 방법:

객체에 지정된 이름의 속성이 있는 경우 Object.prototype.hasOwnProperty(name)은 true를 반환합니다. 객체가 프로토타입 체인에서 이 속성을 상속하거나 그러한 속성이 전혀 없는 경우 false가 반환됩니다. 프로토타입 속성을 고려하지 않고 hasOwnProperty를 통해 현재를 순회하도록 for in 루프를 제한합니다.

function finalArray(){var array=[1,2,3,4,5 ];
Array.prototype.age=13;
var result=[];for(var i in array){if(array.hasOwnProperty(i)){
result.push(array[i]);
}
}alert(result.join(''));
}

참고:

1. 초기 Safari 브라우저와 같은 일부 브라우저는 이 방법을 지원하지 않습니다.

2. 객체는 종종 해시 값으로 사용되므로 hasOwnProperty는 다른 속성에 의해 차단됩니다(그러나 이 속성을 사용하는 것이 너무 지루한 사람은 없을 것 같습니다)

위 내용은 for in 루프와 js의 for 루프의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.