您的位置:首页 > 移动开发 > Objective-C

Object.prototype.hasOwnProperty.call()计算js对象的长度

2017-07-11 15:26 525 查看
在我们日常开发中,对象的使用频率很高,我们计算数组的长度是非常方便的,但是如何计算对象的长度呢?

假如我们有一个图书馆的项目,项目中有一组图书和作者,像下面这样:

[javascript] view
plain copy

 





var bookAuthors = {  

    "Farmer Giles of Ham": "J.R.R. Tolkien",  

    "Out of the Silent Planet": "C.S. Lewis",  

    "The Place of the Lion": "Charles Williams",  

    "Poetic Diction": "Owen Barfield"  

};  

我们分析现在的需求,我们给一个API发送数据,但是书的长度不能超过100,因此我们需要在发送数据之前计算在一个对象中总共有多少本书。那么我们总怎么做呢?我们可能会这样做:

[javascript] view
plain copy

 





function countProperties (obj) {  

    var count = 0;  

    for (var property in obj) {  

        if (Object.prototype.hasOwnProperty.call(obj, property)) {  

            count++;  

        }  

    }  

    return count;  

}  

  

var bookCount = countProperties(bookAuthors);  

  

// Outputs: 4  

console.log(bookCount);  

这是可以实现的,幸运的是Javascript提供了一个更改的方法来计算对象的长度:

[javascript] view
plain copy

 





var bookAuthors = {  

    "Farmer Giles of Ham": "J.R.R. Tolkien",  

    "Out of the Silent Planet": "C.S. Lewis",  

    "The Place of the Lion": "Charles Williams",  

    "Poetic Diction": "Owen Barfield"  

};  

var arr = Object.keys(bookAuthors);  

  

//Outputs: Array [ "Farmer Giles of Ham", "Out of the Silent Planet", "The Place of the Lion", "Poetic Diction" ]  

console.log(arr);  

  

//Outputs: 4  

console.log(arr.length);  

下面我们来对数组使用keys方法:

[javascript] view
plain copy

 





var arr = ["zuojj", "benjamin", "www.zuojj.com"];  

  

//Outputs: ["0", "1", "2"]  

console.log(Object.keys(arr));  

  

//Outputs: 3  

console.log(arr.length);  

Object.keys() 方法会返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in循环遍历该对象时返回的顺序一致(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: