프로그래밍 언어에서 배열의 중요성은 자명합니다. 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 배열의 몇 가지 이상한 동작을 공유했습니다. 기사가 제대로 작성되지 않은 경우 양해해 주시기 바랍니다. 감사합니다!