有一家葡萄牙 IT 公司正在寻找一些领域的开发人员,出于好奇(谢天谢地,因为我已经有工作了),我去查看了招聘信息。
当我去查看 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 应该返回一个基于十六进制基数的整数。然后它再次转换为字符串,这次基于 chars 十进制值。 为了完成这一切,我们通过“否定它”来评估返回“x”(不是我正在寻找的单词,但当时不记得更好的单词了......也许评估一下?)。
那么,为什么输出为假呢?如果我们不评估返回结果,结果就是预期的“人”,但我不明白为什么我们在这个特定实例上得到错误。
有人愿意详细说明吗?
最佳答案
正如您似乎已经锻炼出来的那样,
return x;
...将返回字符串“man”。但你的问题似乎归结为为什么 !"man"
给出 false
?
来自MDN ,逻辑不是 !
:
Returns
false
if its single operand can be converted totrue
; otherwise, returnstrue
.
空字符串 ""
为 false,因此 !""
为 true
,但任何其他字符串均为 true,因此 !“任何其他字符串”
为 false
。
关于JavaScript 字符串评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16689067/