Javascript 对象搜索只适用于第一次

Javascript 对象搜索只适用于第一次,javascript,object,Javascript,Object,我创建了一个名为“Jarz”的对象。然后在其中添加了一个名为“cat”的对象。然后我做了一个函数,在Jarz对象中搜索一个名为“cat”的对象,它可以工作。但是,对于我添加到“Jarz”中的“cat”之后的每个对象,函数都不会在搜索中找到它。只有第一次运行才有效。代码如下: var Jarz = {}; Jarz['cat'] = {}; 以下是函数: function doesObjExist(ObjName){ var tmpArr = Object.keys(Jarz); for(

我创建了一个名为“Jarz”的对象。然后在其中添加了一个名为“cat”的对象。然后我做了一个函数,在Jarz对象中搜索一个名为“cat”的对象,它可以工作。但是,对于我添加到“Jarz”中的“cat”之后的每个对象,函数都不会在搜索中找到它。只有第一次运行才有效。代码如下:

var Jarz = {};

Jarz['cat'] = {};  
以下是函数:

function doesObjExist(ObjName){
var tmpArr = Object.keys(Jarz);
for(var i = 0; i < tmpArr.length; i++){
    if(tmpArr[i] === ObjName){
        return true;
    }

    else {
        return false;
    }
}
}

我似乎找不到这里缺少的东西。感谢您的帮助。

这是因为当您使用hat调用它时,它首先检查cat,因为它是假的,您从循环返回,因此它不会进一步执行检查hat

将此更改为

var-Jarz={};
Jarz['cat']={};
console.log(doesObjExist('cat');
Jarz['hat']={};
log(doesObjExist('hat'));
函数doesObjExist(对象名){
var tmpArr=Object.keys(Jarz);
var计数=0;
对于(变量i=0;i=tmpArr.length)
返回false;

}
Move
return false
to在
for
循环之后。是的,就是这样。它正在检查第一个,因为它不匹配(因为它现在是hat,而不是cat),所以返回false。请注意,
Jarz.hasOwnProperty('hat')
似乎也能做你想做的事情。使用调试器浏览你的代码。把代码的所有其他问题放在一边,如果(b)返回true,则避免使用
的反模式;否则返回false
。只需
返回b。在这种情况下,
返回tmpArr[i]===ObjName(尽管在本例中,这不会满足您的需要)。
Jarz['hat'] = {};
doesObjExist('hat')  // returns false