Как сопоставить пустой словарь в Javascript?
из узла REPL вещь,
> d = {}
{}
> d === {}
false
> d == {}
false
учитывая, что у меня есть пустой словарь, как я могу убедиться, что это пустой словарь ?
10 ответов
вы могли бы расширить Object.prototype
С isEmpty
метод для проверки, не имеет ли объект собственных свойств:
Object.prototype.isEmpty = function() {
for (var prop in this) if (this.hasOwnProperty(prop)) return false;
return true;
};
поскольку он не имеет атрибутов, тег for
цикл не будет иметь ничего, чтобы перебирать. Чтобы отдать должное, я нашел это предложение здесь.
function isEmpty(ob){
for(var i in ob){ return false;}
return true;
}
isEmpty({a:1}) // false
isEmpty({}) // true
Это jQuery использует, работает просто отлично. Хотя это требует, чтобы скрипт jQuery использовал isEmptyObject.
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
//Example
var temp = {};
$.isEmptyObject(temp); // returns True
temp ['a'] = 'some data';
$.isEmptyObject(temp); // returns False
Если включение jQuery не является опцией, просто создайте отдельную чистую функцию javascript.
function isEmptyObject( obj ) {
for ( var name in obj ) {
return false;
}
return true;
}
//Example
var temp = {};
isEmptyObject(temp); // returns True
temp ['b'] = 'some data';
isEmptyObject(temp); // returns False
Я далек от ученого JavaScript,но работает ли следующее?
if (Object.getOwnPropertyNames(d).length == 0) {
// object is empty
}
Он имеет преимущество быть одной строкой чистого вызова функции.
вам нужно будет проверить, что он имеет тип "объект", например:
(typeof(d) === 'object')
а затем реализуйте короткую функцию "size", чтобы проверить, что она пуста,как уже упоминалось здесь.
var SomeDictionary = {};
if(jQuery.isEmptyObject(SomeDictionary))
// Write some code for dictionary is empty condition
else
// Write some code for dictionary not empty condition
Это прекрасно работает.
Если вы попробуете это на узел.js использует этот фрагмент, основанный на этом коде здесь
Object.defineProperty(Object.prototype, "isEmpty", {
enumerable: false,
value: function() {
for (var prop in this) if (this.hasOwnProperty(prop)) return false;
return true;
}
}
);
если производительность не учитывается, это простой метод, который легко запомнить:
JSON.stringify(obj) === '{}'
очевидно, что вы не хотите быть stringifying больших объектов в цикле, хотя.