>  기사  >  웹 프론트엔드  >  배열 Array_javascript 기술의 프로토타입 확장으로 인해 발생하는 순회 문제

배열 Array_javascript 기술의 프로토타입 확장으로 인해 발생하는 순회 문제

WBOY
WBOY원래의
2016-05-16 18:35:011005검색

일반적으로 JavaScript에서는 for 및 for in을 사용하여 배열을 순회하는 결과에는 차이가 없습니다. 해당 루프 변수 i는 0부터 시작하는 배열 인덱스입니다(for in이 배열이 아닌 개체의 속성 컬렉션을 순회하는 경우 i는 속성 이름입니다. 또는 키라고 합니다. 주목해야 할 또 다른 사항은 for in을 사용하여 배열을 순회하는 것입니다. 루프 변수 i는 문자열 유형입니다. Array의 프로토타입을 만든 다음 for in을 사용하여 배열을 순회하는 경우 몇 가지 문제에 주의해야 합니다.
테스트 코드:

코드 복사 코드는 다음과 같습니다.

Array.prototype .max = function()
{
return Math.max.apply({}, this)
var company = ['Adobe','Apple','Google', 'Intel' ,'Microsoft','Oracle','IBM','SUN'];
alert(company.length); //여기서 출력되는 길이는 8이며, 이는 위에 정의된 배열 길이와 일치합니다. 🎜>//다음은 IE6 및 IE7의 첫 번째 루프에서 i 값이 0이 아니지만 위의 프로토타입 확장의 메서드 이름 max입니다. 그러나 IE8 및 FF 브라우저의 마지막 루프에서는 다음과 같습니다. , i 값은 최대
for (var i in company)
{
alert('index is:' i 'nvalue is:' company[i]); /이때, 위의 8만 출력하고 싶다면, 회사 목록의 경우 for in 루프를 사용할 수 없습니다. 이렇게 해야 한다고 하더라도 루프 내부에서 몇 가지 판단을 해야 합니다. 다음:
for (var i in company)
{
if (!isNaN(i))
alert('index is:' i 'nvalue is:' company[i])
}
//물론 안전상의 이유로 너무 게으르지 마십시오. 다음과 같이 일반적인 for 루프를 작성하는 것이 가장 과학적입니다.
for (var i=0; i< company.length; i )
{
alert('index is:' i 'nvalue is:' company[i])
}
//배열로 인해 발생하는 이러한 종류의 순환 문제 프로토타입 확장 속성은 일반적으로 예상한 결과를 얻지 못하게 하지만 주의하지 않으면 코드에 문제가 발생할 수도 있습니다. 찾기 어려운 문제의 경우 다음 예를 살펴보세요.
var userInfo = [["Tom",21,"020-12345678"],["Mike",23,"020-87654321"]]; // 분명히 이것은 배열 중첩입니다.
for (var i in userInfo)
{
//이때, 이 루프에서와 같이 userInfo[i][0]을 통해 기대한 값을 전혀 얻지 못할 수도 있으며, 정의되지 않은 값이 표시되기 때문입니다. i 값이 최대인 경우 userInfo[i]는 ["Tom",21,"020-12345678"]
alert('Name:' userInfo[i][0] '와 같은 하위 배열 대신 함수입니다. nAge:' userInfo[i][1] 'nPhone:' userInfo[i][2]);
}


일반적으로 for in은 객체 속성을 탐색하는 데 사용됩니다. 여전히 for를 사용하여 탐색해야 합니다(물론 배열도 객체입니다). for의 순회 효율이 for in의 순회 효율보다 높다고 이해됩니다. 또한 C#, ActionScript3.0 및 foreach 루프가 가장 효율적인 루프가 될 것이지만 JavaScript에는 이러한 루프가 없습니다. 가장 과학적인 배열 순회는 다음과 같아야 합니다. 일반적인 for 루프를 사용하고 배열 길이를 미리 저장합니다. 코드는 다음과 같습니다.



코드 복사
코드는 다음과 같습니다. var company = ['Adobe', 'Apple', 'Google', 'Intel', 'Microsoft', 'Oracle', 'IBM', 'SUN'] for (var i = 0, companyNum = company.length; i < companyNum; i )
{
alert('index is:' i 'nvalue is:' 회사[i])


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