Нет прямого вызова «длины» или «размера», вы должны проверить ключи, доступные внутри объекта.
Обратите внимание, что все JavaScript объекты ассоциативные массивы (карты), так что ваш код, вероятно, будет лучше использовать общий объект, а не массив:
var testarray = {}; // <= only change is here
testarray['one'] = '1';
testarray['two'] = '2';
testarray['three'] = '3';
Вы можете узнать, какие ключи в объекте с помощью for..in
:
var name;
for (name in testarray) {
// name will be 'one', then 'two', then 'three' (in no guaranteed order)
}
... с помощью которого можно построить функцию, чтобы проверить, является ли пустой объект.
function isEmpty(obj) {
var name;
for (name in obj) {
return false;
}
return true;
}
Как CMS помечено в своем ответе, который будет идти через все ключи, включая ключи на прототип объекта. Если вы хотите только клавиши на объекте, а не его прототип, использовать встроенный в hasOwnProperty
функции:
function isEmpty(obj) {
var name;
for (name in obj) {
if (obj.hasOwnProperty(name)) {
return false;
}
}
return true;
}
дубликатов; хороший ответ @ http://stackoverflow.com/questions/5223/length-of-javascript-associative-array –
У JavaScript нет «ассоциативных массивов», у него есть «массивы» и «объекты». Если вы хотите использовать именованные свойства, используйте простой объект ('{}'), а не массив. – Quentin
@David: семантическая точка, но я бы сказал это наоборот: ** Все ** Объекты JavaScript - это ассоциативные массивы (а не только тип 'Array', хотя, конечно же, это тоже). У них есть строковые ключи, которые можно перечислить, записи, которые можно добавлять и удалять ('delete') ad hoc и т. Д. (Согласен, что если вы не используете числовые индексы, вы не хотите использовать' Array' .) –