2

有一家葡萄牙 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 表读取“man”,并且 parseInt 应该返回一个基于十六进制基数的整数。然后它再次转换为字符串,这次是基于 chars 十进制值。为了完成这一切,我们通过“否定它”来评估返回 'x'(不是我正在寻找的词,但当时不记得更好的词了......估计可能吗?)。

那么,为什么输出是假的呢?如果我们不评估返回结果,则结果是预期的“人”,但我不明白为什么我们在这个特定实例上得到错误。

有人愿意详细说明吗?

4

1 回答 1

3

As you seem to have worked out,

return x;

...will return the string "man". But your question seems to boil down to why !"man" gives false?

From MDN, logical not !:

Returns false if its single operand can be converted to true; otherwise, returns true.

The empty string "" is falsey, so !"" is true, but any other string is truthy, so !"any other string" is false.

于 2013-05-22T10:11:33.500 回答