假设我宣布
var ad = {};
如何检查该对象是否包含用户定义的属性?
假设我宣布
var ad = {};
如何检查该对象是否包含用户定义的属性?
当前回答
对象。hasOwn是一个新的静态方法(还不是所有浏览器都完全支持),它检查指定的对象是否有指定的属性作为自己的属性,如果是这样就返回true。如果该属性被继承或在该对象上不存在,则返回false。
您可以遍历对象属性并检查它们是否确实是自己的属性
for (let property in ad) {
if (Object.hasOwn(ad, property)) {
// handle your code for object own properties here
}
}
更多关于Object的信息。hasOwn - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/
浏览器兼容性在这里- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn#browser_compatibility
其他回答
使用jQuery,你可以使用:
$.isEmptyObject(obj); // Returns: Boolean
从jQuery 1.4开始,这个方法既检查对象本身的属性,也检查从原型继承的属性(因为它不使用hasOwnProperty)。
随着ECMAScript第五版在现代浏览器(IE9+, FF4+, Chrome5+, Opera12+, Safari5+),你可以使用内置的对象。键的方法:
var obj = { blah: 1 };
var isEmpty = !Object.keys(obj).length;
或者简单的JavaScript:
var isEmpty = function(obj) {
for(var p in obj){
return false;
}
return true;
};
ES6函数
/**
* Returns true if an object is empty.
* @param {*} obj the object to test
* @return {boolean} returns true if object is empty, otherwise returns false
*/
const pureObjectIsEmpty = obj => obj && obj.constructor === Object && Object.keys(obj).length === 0
例子:
let obj = "this is an object with String constructor"
console.log(pureObjectIsEmpty(obj)) // empty? true
obj = {}
console.log(pureObjectIsEmpty(obj)) // empty? true
obj = []
console.log(pureObjectIsEmpty(obj)) // empty? true
obj = [{prop:"value"}]
console.log(pureObjectIsEmpty(obj)) // empty? true
obj = {prop:"value"}
console.log(pureObjectIsEmpty(obj)) // empty? false
如果你使用的是underscore.js,那么你可以使用_。isEmpty功能:
var obj = {};
var emptyObject = _.isEmpty(obj);
for(var memberName in ad)
{
//Member Name: memberName
//Member Value: ad[memberName]
}
成员是指成员属性,成员变量,你可以叫它>_>
上面的代码将返回EVERYTHING,包括toString… 如果你只想查看对象的原型是否被扩展:
var dummyObj = {};
for(var memberName in ad)
{
if(typeof(dummyObj[memberName]) == typeof(ad[memberName])) continue; //note A
//Member Name: memberName
//Member Value: ad[memberName]
}
注A:我们检查虚拟对象的成员是否与测试对象的成员具有相同的类型。如果它是一个扩展,dummyobject的成员类型应该是"undefined"
var hasAnyProps = false; for (var key in obj) { hasAnyProps = true; break; }
// as of this line hasAnyProps will show Boolean whether or not any iterable props exist
简单,适用于每个浏览器,即使它在技术上是对对象上的所有键的循环,它也不会循环遍历所有键…要么有0,循环不运行,要么有一些,循环在第一个之后中断(因为我们只检查是否有ANY…那为什么还要继续呢?)