> 웹 프론트엔드 > JS 튜토리얼 > JavaScript arrays_javascript 팁의 이상한 동작

JavaScript arrays_javascript 팁의 이상한 동작

WBOY
풀어 주다: 2016-05-16 15:18:30
원래의
1331명이 탐색했습니다.

프로그래밍 언어에서 배열의 중요성은 자명합니다. JavaScript의 배열은 가장 일반적으로 사용되는 객체 중 하나입니다. 배열은 약한 유형으로 인해 매우 유연하고 강력합니다. 동일한 유형 또는 해당 하위 유형의 요소만 저장할 수 있는 Java와 같은 강력한 유형의 고급 언어의 배열과 달리 JavaScript는 여러 유형의 요소를 동일한 배열에 저장할 수 있으며 길이도 동적으로 조정할 수 있습니다. 데이터가 증가함에 따라 또는 배열 길이에 대한 자동 변경을 줄입니다.

오늘은 JavaScript 배열을 검토한 후 그의 이상한 행동을 요약하여 공유하겠습니다. 잘못된 점이 있으면 지적해 주세요.

이상한 1: Array() 생성자 함수는 new 키워드를 사용하지 않고 호출할 수 있습니다:

Array() 생성자는 자신에게 전달된 매개변수를 배열의 요소로 사용하여 일반적으로 다음과 같이 호출합니다.

var a = new Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"] 
로그인 후 복사

그러나 다음과 같이 new를 생략할 수도 있습니다.

var a = Array(1, 2, "bom!");
a.length; //3
console.log(a); //[1, 2, "bom!"] 
로그인 후 복사

내부 구현 메커니즘이 무엇인지는 모르지만 생성자 함수는 다음과 같이 정의될 수 있을 것으로 추측됩니다.

function Array(args) {
//如果,this不是Array的实例的话,
//说明不是通过new调用的,则在这里再重新调用
if( !this instanceof Array) {
return new Array(args);
}//后面是正常调用时的实现代码<br />//...<br />} 
로그인 후 복사

이상한 2: 생성자에 매개변수가 하나만 전달되면 동작을 예측할 수 없습니다

하나의 매개변수만 전달되고 이 매개변수가 정수이면 배열이 얻어지며 길이는 이 매개변수와 같습니다

var a = new Array(12);
console.log(a.length); //12
console.log(a); //[] 
로그인 후 복사

부동 소수점 숫자만 전달하면 오류가 보고됩니다.

var a = new Array(1.1); //Uncaught RangeError: Invalid array length(…) 
로그인 후 복사

문자열을 배열의 첫 번째 요소로 사용하면 문자열 전달이 제대로 작동합니다.

var a = new Array("1.1");
console.log(a.length); //
console.log(a); //["1.1"] 
로그인 후 복사

그러나 모호함을 피하기 위해 리터럴 형식으로 직접 배열을 생성하는 것이 가장 좋습니다.

var a = []; //空数组
var a = [1, 1, "bom"]; //三个元素
var a = [12]; //一个元素,并且元素是12 
로그인 후 복사

이상한 3: 배열의 길이 속성을 수정할 수 있음(쓰기 가능)

다음과 같이 길이를 2에서 100으로 직접 변경했더니 수정에 성공했습니다! ! !

var a = [1, 2, 3, 4];
console.log(a.length); //4
a.length = 100; 
console.log(a.length); //100 
로그인 후 복사

길이가 100임에도 불구하고 a[4]-a[99] 요소는 존재하지 않습니다. 예를 들어 해당 값을 요청하는 경우 0에서 a.length까지 루프에서 수행하면 정의되지 않음이 반환됩니다. .

다음 시청:

var a = [1, 2, 3, 4];
a.length = 100;
console.log(a[10]); //undefined
console.log(99 in a); //false 
로그인 후 복사

아래 예와 다소 유사:

var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(a.length); //100 
로그인 후 복사

차이점은 a[99]가 정의되지 않은 값을 가지고 있음에도 불구하고 우리가 만들었기 때문에 존재한다는 것입니다. 그러나 다음과 같이 a[4]부터 a[98]까지의 모든 요소는 존재하지 않습니다.

var a = [1, 2, 3, 4];
a[99] = undefined;
console.log(99 in a); //true;
console.log(98 in a); //false
console.log(a.length); //100 
로그인 후 복사

위 내용은 JavaScript 배열의 몇 가지 이상한 동작을 공유했습니다. 기사가 제대로 작성되지 않은 경우 양해해 주시기 바랍니다. 감사합니다!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿