2013-05-22 126 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我來發表這篇文章問題,因爲我試過使用其他字符串,而不是空字符串,我仍然作爲輸出錯誤,但我相信你的解釋是正確的 –