javascript - Array.size() vs Array.length


Hva er forskjellen mellom de to?

Så jeg vet at array.size() er en funksjon mens array.length er en egenskap. Finnes det en brukstilfelle for å bruke den ene fremfor den andre? Er den ene mer effektiv? (Jeg vil anta at .length er betydelig raskere siden det er en egenskap i stedet for et metodekall?) Hvorfor skulle man noen gang bruke det tregere alternativet? Finnes det noen nettlesere som er inkompatible med den ene eller den andre?

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);

Vil skrive ut:

0, 0, true
3, 3, true

Svar #1

Array.size() er ikke en gyldig metode

Bruk alltid length-egenskapen

Det finnes et bibliotek eller skript som legger til size-metoden til array-prototypen siden dette ikke er en innebygd array-metode. Dette gjøres ofte for å legge til støtte for en egendefinert getter. Et eksempel på bruk av dette ville være når du vil få størrelsen i minnet til en array (som er det eneste jeg kan tenke på som ville være nyttig for dette navnet).

Underscore.js definerer dessverre en size-metode som faktisk returnerer lengden på et objekt eller en matrise. Siden lengdeegenskapen til en funksjon dessverre er definert som antall navngitte argumenter funksjonen erklærer, måtte de bruke et alternativ, og size ble valgt (count ville ha vært et bedre valg).

Svar #2

.size() er ikke en innebygd JS-funksjon for Array (i det minste ikke i noen nettleser jeg kjenner til).

.length bør brukes.


Hvis

.size() fungerer på siden din, sørg for at du ikke har inkludert noen ekstra biblioteker som Prototype som kan forstyrre Array-prototypen.

eller

Det kan være en eller annen plugin på nettleseren din som tukler med Array-prototypen.

Svar #3

Funksjonen .size() er tilgjengelig i jQuery og mange andre biblioteker.

Egenskapen .length fungerer bare når indeksen er et heltall.

length-egenskapen vil fungere med denne typen array:

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

Egenskapen length vil ikke fungere i følgende tilfelle:

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

Årsaken er at JavaScript ikke støtter indekser av typen streng i matriser, men i objekter (som egenskaper), og pbook eller et objekt med prototypen Array kalt "pbook" ville nå ha to tildelte egenskaper ("David" og "Jennifer"; dvs. pbook.David) og representere en tom matrise.

const a = []; // Relatively the same as: const a = new Array();

a['0a'] = 123; a['2'] = 456; a[1] = 789;

console.log(`a(${a.length}) = `, a);
console.log(`Enumerable properties of ${Object.prototype.toString.call(a)} = `, Object.keys(a));

Så i ditt tilfelle bør du bruke .length-egenskapen.


For objekter, vennligst vurder følgende:
- Lengde på et JavaScript-objekt;
- Object.getOwnPropertyNames vs Object.keys.

Svar #4

.size() er jQuerys, mest sannsynlig forveksler du det med eller tok det fra noen andre som hadde importert jQuery-biblioteket til prosjektet sitt.

Hvis du hadde importert jQuery og du skrev som $ (array).size(), ville det returnere arrayets lengde.

Svar #5

array.length er ikke nødvendigvis antallet elementer i arrayet:

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

Lengden på arrayet er én mer enn den høyeste indeksen.

Som nevnt tidligere er Array.size() ikke en gyldig metode.

Mer informasjon

Svar #6

Egenskapen 'length' returnerer (siste_nøkkel + 1) for arrayer med numeriske nøkler:

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

vil skrive ut 12!

Dette vil fungere:

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

Relaterte artikler