如何在对象中找到特定项目不是javascript中的函数

时间:2014-04-22 15:35:22

标签: javascript

我有以下代码来管理图书集。

var Book = function(title,pages,priority){
    this.title = title;
    this.pages = pages;
    this.priority = priority;
    this.GetMaxmimumDays=function(){ 
        var effortCalculator = new EffortCalculator(this.pages);
        return effortCalculator.CalculateDays();
    }
};
var BooksCollection = (function(){
    var books=[];
    return {
        Add:function(book){
            books.push(book);
        },
        Remove:function(title){
            for(var i=0;i<books.length;i++){
                if(books[i]["title"]==title){
                    books[i]["title"]=null;
                }
            }
        },
        Print:function(){
            for(var i=0;i<books.length;i++){
                var itemText="";
                for(item in books[i]){
                    itemText=itemText+""+item+":"+books[i][item];
                }
                alert("item"+itemText); /** itemText prints the string includes the function definition. **/
            }
        },
        Count:books.length,
        SortByPriority:function(){

        }
    };
})();

在上面的代码中BooksCollection.Print()打印集合中的everyItem和everyProperty。但是书籍实例有功能成员。同样是在警告中打印出来。

我将Print()包裹起来,如下所示,隐藏输出中正在打印的功能。

        Print:function(){
            for(var i=0;i<books.length;i++){
                var itemText="";
                for(item in books[i]){
                    if(!(item instanceof Function)){
                        itemText=itemText+""+item+":"+books[i][item];
                    }
                }
                alert("item"+itemText);
            }
        }

但事情仍然是消极的。我试过(typeof(item)===&#34; Function&#34;)但是typeof(item)仍然读取&#34; String&#34;。

我想知道typeof和instanceOf关键字的可疑行为。

你可以在这里找到一个小提琴。 http://jsfiddle.net/saravanakumarrc/rDEnt/40/

请帮我找出解决方案。

1 个答案:

答案 0 :(得分:2)

在您的情况下,typeof item始终为string - 它是枚举Book属性的关键。

您要测试的是该项目的,因此您需要typeof books[i][item]

 for(item in books[i]){
     if(typeof books[i][item] != 'function'){
         itemText=itemText+""+item+":"+books[i][item]+ '\r\n';
     }
 }

实例:http://jsfiddle.net/kDHfU/