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 コンソールに行ってこれを書きましたが、出力は「false」です。私がそれを正しく理解していれば、「奇妙な」コードであり、ASCII テーブルによると「ma n」を読み取り、parseInt は 16 進数の基数に基づいて整数を返すことになっています。次に、今度は chars の 10 進数値に基づいて、もう一度文字列に変換されます。最後に、戻り値 'x' を「否定」して評価します (私が探していた単語ではありませんが、当時はもっと良い単語を思い出すことができませんでした... 多分評価しますか?)。

では、なぜ出力が false になるのでしょうか。戻り値を評価しない場合、結果は期待どおりの「人間」ですが、この特定のインスタンスで false になる理由がわかりません。

誰か詳しく説明したいですか?

4

1 に答える 1

3

頑張ったようで、

return x;

...文字列「man」を返します。しかし、あなたの質問は、なぜ!"man"与えるのfalseかに要約されるようです。

MDNから、logical not !:

falseその単一のオペランドを に変換できるかどうかを返しますtrue。それ以外の場合は、 を返しますtrue

空の文字列""は false なので、!""ですtrueが、他の文字列は true!"any other string"ですfalse

于 2013-05-22T10:11:33.500 に答える