Array.size() vs Array.length

Какая разница между двумя?

Итак, я знаю, что 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

Ответ 1

Array.size() не является допустимым методом

Всегда использовать свойство length

Существует библиотека или script, добавляющая метод размера к прототипу массива, поскольку это не метод собственных массивов. Обычно это делается для добавления поддержки для пользовательского getter. Примером использования этого будет то, когда вы хотите получить размер в памяти массива (что единственное, что я могу придумать, было бы полезно для этого имени).

Underscore.js, к сожалению, определяет метод size, который фактически возвращает длину объекта или массива. Поскольку, к сожалению, свойство length функции определяется как число именованных аргументов, функция объявляет, что им нужно было использовать альтернативу и размер был выбран (счет был бы лучшим выбором).

Ответ 2

.size() не встроенная функция JS Array (по крайней мере, не в любом браузере, о котором я знаю).

.length следует.


Если

.size() работает на вашей странице, убедитесь, что у вас нет дополнительных библиотек, включенных в число prototype, который выдает с прототипом Array.

или

Возможно, в вашем браузере есть плагин, который с прототипом Array не работает.

Ответ 3

Функция .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.

Ответ 4

.size() - это jQuery, возможно, вы либо сбились с толку, либо взяли у кого-то еще, кто импортировал библиотеку jQuery в свой проект.

Если вы импортировали jQuery, и вы должны писать как $(array).size(), он вернет длину массива.

Ответ 5

array.length не обязательно количество элементов в массиве:

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

Длина массива - это больше, чем самый высокий индекс.

Как указано выше, Array.size() не является допустимым методом.

Подробнее

Ответ 6

Начиная с версии jQuery 1.8 метод .size() устарел. Вместо этого используйте свойство .length

Смотрите: https://api.jquery.com/size/

Ответ 7

Свойство 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 );

Ответ 8

size() массива size() не существует в чистом JS

Ответ 9

Размер обнаруживает дубликаты, он возвращает количество уникальных значений

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