2016-08-04 28 views
1

ich diesen Javascript-Code im Internet gefunden habe, aber ich kann nicht herausfinden, warum es eine unerwartete Zahl zeigt:Seltsam Javascript-Code zeigt falsche Nummer

var foo = 5; 
var bar = 7; 
fоo = bar; 
bar += +!(foo - 5); 
console.log(foo = bar); // It displays 8 instead of 7 

Wie ich verstehe, ich definierte zwei Variablen foo und bar welche die Werte 5 bzw. 7 haben. Danach kopieren wir den Wert von bar in foo. In der vierten Zeile wird bar nicht inkrementiert, weil +!(7 - 5) == +!2 == +false == 0. In der letzten Zeile wird der Wert von bar erneut in foo kopiert und dann angezeigt, was bedeutet, dass foo7 sein muss. Aber warum loggt die Konsole stattdessen 8?

Antwort

5

Die Linie fоo = bar; weist tatsächlich den Wert von bar auf einen neu global angelegten Variable fоo - das lateinische Klein F, Kyrillisch Kleinbuchstabe O und lateinischer Klein O.

Wenn Sie fоo = bar; durch foo = bar; ersetzen (tatsächlich kopieren Sie es einfügen), wird es wie erwartet funktionieren.

Sie können dies selbst debuggen, indem Sie mit dem Code in der Konsole zu experimentieren und schließlich durch die in der Konsole eingeben:

"fоo = bar;".split("").map(function(a){ 
    return a.charCodeAt(0); 
}); 
/* 
** Returns: 
** [ 
** 102, // "f" 
** 1086, // "o"? This seems suspicious! 
** 111, // "o" 
** 32, // " " 
** 61, // "=" 
** 32, // " " 
** 98, // "b" 
** 97, // "a" 
** 114, // "r" 
** 59 // ";" 
** ] 
*/ 
0

Ich habe es herausgefunden. In Ihrem Code ist diese Zeile der Trick:

f o = bar;

Das o ist kein tatsächliches o-Zeichen. Ersetzen Sie es und Sie werden sehen.