First
在我们日常开发中,对象的使用频率很高,获取数组的长度是很简单,但如何获取对象的长度?
假设我的书包只能放10本书,那么我就得控制我现有的书本数:
var schoolBagMax=10;
var books = {
"红楼梦": "曹雪芹",
"水浒传": "施耐庵,罗贯中",
"三国演义": "罗贯中",
"西游记": "吴承恩"
};
分析现在的需求,我们得控制书本数小于书包最大容量,因为已知容量,所以先算出现在书本数:
function countProperties (obj) {
var count = 0;
for (var key in obj) {
//if (Object.prototype.hasOwnProperty.call(obj, key)) {//感觉好像没必要,希望有人能探讨一下
//if (obj.hasOwnProperty(key)) {//同上简写
count++; //直接加
//}
}
return count;
}
var bookCount = countProperties(books);
console.log(bookCount); // 输出: 4
if(bookCount<=schoolBagMax){
console.log("能装");
}else{
console.log("装不下了");
}
这是可以实现的,只是好像没必要,js实际上有一个方法能直接实现:
var arr = Object.keys(books);
console.log(arr); //Outputs: Array [ "红楼梦", "水浒传", "三国演义", "西游记" ]
console.log(arr.length); //Outputs: 4
if(arr.length<=schoolBagMax){
console.log("能装");
}else{
console.log("装不下了");
}
Object.keys() 方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in循环遍历该对象时返回的顺序一致(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。