2013-05-22 99 views
2

有一家葡萄牙IT公司正在寻找一些开发人员在几个领域,只是出于好奇(因为我已经有一份工作,幸好)我去检查工作发布。Javascript字符串评估

当我去看看JS开发人员发布时,他们提供了一段引起我注意的JS代码。我和JS一起工作了一段时间,我发现自己不时回到JS编程中,但老实说,我从来没有见过类似于给出的代码的东西。

这是代码:

!(function(x){ 
    '6D 61 6E'.split(' ').forEach(function(a){ 
     x+=String.fromCharCode(parseInt(a,16)); 
    }); 
    return x; 
})(''); 

我去写这个Chrome的JS控制台上,输出为“假”。 如果我理解正确,那么“奇怪”的代码,并根据ASCII表读取'm a n',并且parseInt应该返回一个基于十六进制基数的整数。然后它再次被转换成一个字符串,这次基于字符十进制值。 为了完成这一切,我们通过“否定它”来评估返回'x'(不是我正在寻找的词,但当时记不起更好的词......评估也许?)。

然后,为什么输出是错误的?如果我们不评估收益,结果是预期的'人',但我不明白为什么我们会在这个特定的情况下得到假。

任何关心细节?

+7

这与'addEventListener()'有什么关系。 – nnnnnn

+0

@nnnnnn我的错误,我打开了要问另一个问题,我没有来完成,忘了改标题..;) –

回答

3

你似乎已经制定出来,

return x; 

...将返回字符串 “人”。但你的问题似乎归结为为什么!"man"给出false

MDN从逻辑不!

返回false如果单个操作数可以被转换为true;否则,返回true

空字符串""是falsey,所以!""true,但其他任何字符串truthy,所以!"any other string"false

+0

'var myMind ='blown';' –

+0

@nnnnnn我来发表这篇文章问题,因为我试过使用其他字符串,而不是空字符串,我仍然作为输出错误,但我相信你的解释是正确的 –