有没有人解释javascript如何做到这一点。不知何故,这个函数在同一时间既是真的又是假的。这只是一次通过,没有循环或任何东西。
console.log(key);
if (this.watches.get(key)) {
console.log("found it");
} else {
console.log("whhhat?");
}
console.log(this.watches);
Firebug Console按原样登录。
search-key
found it
Object search-key=Object $family=Object
whhhat?
Object search-key=Object $family=Object
[编辑] 这里是。上面的完整脚本和输出块是从firebug复制和粘贴的。这是我见过的最奇怪的事情。 http://snipt.org/Hkl
我使用mootools框架,所以this.watches = $ H({});是一个哈希表。我正在使用一个数组并遇到完全相同的问题,然后将其切换为$ H({}),因为我认为我做错了。
答案 0 :(得分:9)
如果这个
Object search-key=Object $family=Object
由以下人员制作:
console.log(this.watches);
然后这显然是 而不仅仅是一次传递。
这并不是说它在一个循环或任何东西中,只是这个代码被多次调用。
有人可能会说
为什么搜索键只出现一次呢?
答案是:我们真的不知道,因为我们没有看到所有的代码。
最可能的情况是第二次key
是空字符串
尝试console.log("")
什么都不打印
也试试这个:
>>> console.log(""); console.log(1); console.log(""); console.log(2)
复制输出并将其粘贴到任何文本编辑器中(即将其粘贴为纯文本)
1
2
它看起来像在1和2之间没有任何东西,即使控制台 显示空行的提示,但当你复制粘贴时这个提示消失了输出为纯文本。
<强>更新强>
好吧,如果这个过程是通过调用WCHistory.implement(..)
启动的,并且这个方法被调用了两次,那么很明显,第二次,由于某种原因,键是空的。
试试这个
将console.log(key)
更改为console.log("key: " + key)
,您应该会看到以下内容:
key: search-key
found it
Object search-key=Object $family=Object
key:
whhhat?
Object search-key=Object $family=Object
答案 1 :(得分:1)
我认为答案是这不仅仅是一次通过。
这看起来代码被调用两次,然后第二次调用空键。可能需要查看更多代码才能确定。
我猜你可以在if语句之前加上一个整数计数来确认这个假设。
答案 2 :(得分:0)
将您的代码段更改为此,以查看它是否实际被调用了两次,但由于某种原因,console.log(key)
第二次没有输出内容。
console.log("=====");
console.log(key);
if (this.watches.get(key)) {
console.log("found it");
} else {
console.log("whhhat?");
}
console.log(this.watches);
然后你会得到输出:
=====
search-key
found it
Object search-key=Object $family=Object
=====
whhhat?
Object search-key=Object $family=Object
如果你得到输出:
=====
search-key
found it
Object search-key=Object $family=Object
whhhat?
Object search-key=Object $family=Object
然后我错了,我会删除答案(或者更有可能将其作为社区维基,以便其他人不会遵循相同的路径)。