AJAX リクエストの後、アプリケーションが次のような空のオブジェクトを返すことがあります。
var a = {};
それが事実かどうかはどうすれば確認できますか?
ベストアンサー1
for…inループをObject.hasOwn
(で使うことができますECMA2022+ について) オブジェクトに独自のプロパティがあるかどうかを確認するテスト:
function isEmpty(obj) {
for (const prop in obj) {
if (Object.hasOwn(obj, prop)) {
return false;
}
}
return true;
}
{}
のような空のオブジェクトを、独自のプロパティを持たない他のオブジェクト (例: )と区別する必要がある場合はDate
、さまざまな (残念ながらニーズに固有の) 型チェックを行うことができます。
function isEmptyObject(value) {
if (value == null) {
// null or undefined
return false;
}
if (typeof value !== 'object') {
// boolean, number, string, function, etc.
return false;
}
const proto = Object.getPrototypeOf(value);
// consider `Object.create(null)`, commonly used as a safe map
// before `Map` support, an empty object as well as `{}`
if (proto !== null && proto !== Object.prototype) {
return false;
}
return isEmpty(value);
}
この例のように比較すると、Object.prototype
クロスレルム オブジェクトを認識できないことに注意してください。
を使用しないでください Object.keys(obj).length
。これは、配列の長さを取得するためだけにすべてのプロパティ名を含む配列を作成するため、O(N) の複雑度になります。オブジェクトを反復処理しても同じ目的が達成されますが、O(1) になります。
ES 2022+ をサポートしていない JavaScript エンジンとの互換性のために、をおよびにconst
置き換えることができます。var
Object.hasOwn
Object.prototype.hasOwnProperty.call
function isEmpty(obj) {
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
return false;
}
}
return true
}
多くの一般的なライブラリでは、空のオブジェクトをチェックする関数も提供されています。
jQuery.isEmptyObject({}); // true
_.isEmpty({}); // true
_.isEmpty({}); // true
フック:
Hoek.deepEqual({}, {}); // true
Ext.Object.isEmpty({}); // true
angular.equals({}, {}); // true
ラムダ:
R.isEmpty({}); // true