有一家葡萄牙IT公司正在寻找一些领域的开发人员,只是出于好奇(因为我已经找到了工作,谢天谢地)我去检查了招聘信息。
当我去查看JS开发人员的帖子时,他们提供了一段引起我注意的JS代码。我已经和JS一起工作了一段时间,我发现自己不时回到JS编程,但说实话,我从来没有见过任何与给定代码类似的内容。
这是代码:
!(function(x){
'6D 61 6E'.split(' ').forEach(function(a){
x+=String.fromCharCode(parseInt(a,16));
});
return x;
})('');
我在Chrome的JS控制台上写了这个并输出'false'。 如果我理解正确,“奇怪的”代码,并根据ASCII表读取'm a n',并且parseInt应该返回基于十六进制基数的整数。然后它再次转换为字符串,这次基于字符十进制值。 为了完成这一切,我们通过“否定它”来评估返回'x'(不是我想要的那个词,但是当时记不起更好的一个......评估可能吗?)。
然后,为什么输出错误?如果我们不评估返回结果,那么结果就是预期的'man',但我不明白为什么我们在这个特定实例上得到错误。
有人想详细说明吗?
答案 0 :(得分:3)
你似乎已经解决了,
return x;
...将返回字符串“man”。但是你的问题似乎归结为!"man"
给出false
的原因?
来自MDN,逻辑不是!
:
如果单个操作数可以转换为
false
,则返回true
;否则,返回true
。
空字符串""
是假的,因此!""
为true
,但任何其他字符串都是真实的,因此!"any other string"
为false
。