Array.size () 대 Array.length


385

둘의 차이점은 무엇입니까?

그래서 나는 그것이 array.size()함수 인 동안 array.length속성 이라는 것을 알고 있습니다. 다른 것을 사용하는 유스 케이스가 있습니까? 하나 더 효율적입니까? ( .length메소드 호출이 아닌 속성이므로 상당히 빠르다고 생각 합니까?) 왜 느린 옵션을 사용합니까? 하나 또는 다른 브라우저와 호환되지 않는 브라우저가 있습니까?

  var x = [];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);
  x =[1,2,3];
  console.log(x.size());
  console.log(x.length);
  console.log(x.size()==x.length);

인쇄합니다 :

  0, 0, true
  3, 3, true

63
Array.size()네이티브 JavaScript 에서 메소드를 어디 에서 찾았 습니까?
VisioN

2
크롬은 없습니다 .size...
0x499602D2

1
@AbrahamP idk 사용중인 Chrome 콘솔 ...
Naftali 일명 Neal


3
.size()프로토 타입 프레임 워크에서 유래 한 것으로 보입니다 : prototypejs.org/doc/latest/language/Array/prototype/size
MikeM

답변:


535

Array.size ()는 유효한 메소드가 아닙니다

항상 길이 속성을 사용하십시오

기본 프로토 타입 메소드가 아니기 때문에 size 프로토 타입을 배열 프로토 타입에 추가하는 라이브러리 또는 스크립트가 있습니다. 이것은 일반적으로 커스텀 게터에 대한 지원을 추가하기 위해 수행됩니다. 이것을 사용하는 예는 배열의 메모리에서 크기를 얻고 싶을 때입니다 (이 이름에 유용 할 것이라고 생각할 수있는 유일한 것입니다).

Underscore.js는 불행히도 size실제로 객체 또는 배열의 길이를 반환 하는 메소드를 정의합니다 . 불행히도 함수의 길이 속성은 명명 된 인수의 수로 정의되므로 함수는 대체를 사용해야한다고 선언하고 크기를 선택했습니다 (수는 더 나은 선택이었습니다).


154

.size()하지 의 기본 JS 기능 Array(적어도하지 내가 아는 것을 모든 브라우저에서).

.length 사용해야 합니다.


만약

.size() 않는 페이지에 대한 작업을, 당신이 같이 포함 된 모든 추가 라이브러리가없는 있도록 프로토 타입 으로 일 처리되어Array프로토 타입을.

또는

브라우저에 Array프로토 타입 과 연결되는 플러그인이있을 수 있습니다 .


@BartFriederichs 잘 크롬에 있지만, 알아두면 좋습니다 : -D
Naftali 일명 Neal

Chrome에서는 작동하지만 Firefox에서는 작동하지 않습니다. 크롬을 디버깅 요구에 사용하여 작동하는 것처럼 보입니다. 존재하지 않는 것을 지적 해 주셔서 감사합니다.
Abraham P

9
Chrome에서 작동하는 경우 페이지에 호출하여 Array 프로토 타입에 추가하는 추가 라이브러리가있을 수 있습니다.
스파이크 윌리엄스

1
Version 23.0.1271.97 [] .size function size () {return this.length;} 실제로 .length를 감싸는 래퍼입니다 ... 지금은 어리석은 느낌이 듭니다 ...
Abraham P

2
@AbrahamP,이 페이지에서 F12를 누르고 [].size콘솔에 입력하십시오 . 작동하면 Array 프로토 타입으로 뭉친 Chrome 플러그인이 있으며 걱정할 것입니다. :)
aquinas

30

.size()함수는 Jquery 및 기타 여러 라이브러리에서 사용할 수 있습니다.

.length속성은 인덱스가 정수인 경우에만 작동합니다.

length속성 다음 유형의 배열에서 작동합니다.

var nums = new Array();
nums[0] = 1; 
nums[1] = 2;
print(nums.length); // displays 2

length속성은 되지 않습니다 배열 이러한 유형의 작업 :

var pbook = new Array(); 
pbook["David"] = 1; 
pbook["Jennifer"] = 2;
print(pbook.length); // displays 0

따라서 귀하의 경우 .length속성 을 사용해야합니다 .


크기가 작동하지 않으면 문자열에서 작동하는 것이 있습니까?
Chris

2
pbook위와 같이 문자열 키가있는 배열의 경우 @Chris , $(pbook).size();[jQuery 필요]
불쾌한 Pasty

3
그런데 왜 두 곳에 공백을 두겠습니까?
Post Self

19

.size() jQuery 라이브러리입니다. jQuery 라이브러리를 자신의 프로젝트로 가져온 다른 사람과 혼동하거나 다른 사람을 데려 갔을 것입니다.

당신이 원하는 경우 jQuery를가 수입하고 같이 쓰는 것 $(array).size(), 그것은 배열의 길이를 반환합니다.


1
많은 도서관 사용 .size()에만 JQuery와 아니다
Naftali을 닐 일명

15

array.length 반드시 배열의 항목 수는 아닙니다.

var a = ['car1', 'car2', 'car3'];
a[100] = 'car100';
a.length; // 101

배열의 길이가 가장 높은 인덱스보다 하나 더 큽니다.

앞에서 언급했듯이 Array.size()올바른 방법은 아닙니다.

추가 정보


실제로는 항목 수입니다. 대부분의 JS 인터프리터는 배열 행을 정의되지 않은 채 채 웁니다. 예를 들어, 배열에 값이없는 97 개의 요소 (정의되지 않은)를 가진 101 개의 요소가 있지만 요소가 있습니다. [ 'car1', 'car2', 'car3', undefined * 97, 'car100']이 배열을 반복하면 증가 변수는 루프 다음에 101이됩니다.
ElJackiste

반면에 array.length는 반드시 배열 에 정의 된 (할당되지 않은) 값 의 숫자는 아닙니다 .
ElJackiste

4

'length'속성은 숫자 키가있는 배열의 (last_key + 1)을 반환합니다.

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
log.info( nums.length );

12를 인쇄합니다!

이것은 작동합니다 :

var  nums  =  new  Array ();
nums [ 10 ]  =  10 ; 
nums [ 11 ]  =  11 ;
nums [ 12 ]  =  12 ;
log.info( nums.length + '  /  '+ Object.keys(nums).length );

흥미로운 답변이지만 질문에 대한 답변인지는 확실하지 않습니다
OliverRadini

OP는 'Array.size () vs Array.length'를 묻고있었습니다. 이전 논의에서 '크기'기능은 표준 JavaScript의 일부가 아니라 라이브러리에 의해 구현된다는 것이 분명했습니다. 따라서 OP가 실제 길이의 JavaScript 배열을 검색하는 방법에 관심이 있다고 가정합니다. 나는 배열에 문자열과 같은 다른 유형의 객체가 포함되어있을 때 동작이 다르기 때문에 예기치 않은 동작을 유발할 수있는 JavaScript의 알려진 '기능'을 밝히고 있습니다.
cskwg 2013


2

크기가 중복을 감지하면 고유 값의 수를 반환합니다.

const set1 = new Set([1, 2, 3, 4, 5, 5, 5, 6]);
console.log(set1.size);
// expected output: 6

1

사실, .size()순수한 JavaScript 메소드는 아니며 , 약간 보이는 것처럼 보이는 Set 객체 의 접근 자 속성 .size이 있지만 함수 메서드는 아닙니다. 앞에서 말했듯이 Set 객체의 접근 자 속성은 Set 객체의 (고유 한) 요소..size()

size 접근 자 속성은 Set 객체의 (고유 한) 요소 수를 반환합니다.

const set1 = new Set();
const object1 = new Object();

set1.add(42);
set1.add('forty two');
set1.add('forty two');
set1.add(object1);

console.log(set1.size);
// expected output: 3

그리고 length반복 가능한 객체 (배열)의 속성으로 해당 배열의 요소 수를 반환합니다. 값은 부호가없는 32 비트 정수이며 항상 배열에서 가장 높은 인덱스보다 숫자가 더 큽니다.

const clothing = ['shoes', 'shirts', 'socks', 'sweaters'];

console.log(clothing.length);
// expected output: 4

0

.length 속성을 사용 하여 배열의 요소 수를 설정하거나 반환 할 수 있습니다. 반환 값은 숫자입니다

> set the length: let count = myArray.length;
> return lengthof an array : myArray.length

중복 값을 필터링하고 세트의 요소 수를 가져와야 할 경우를 대비하여 크기를 조정할 수 있습니다.

const set = new set([1,1,2,1]); 
 console.log(set.size) ;`
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.