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