2016-04-19 5 views
0

während neugierig (und kein JS Hintergrund) Ich fange an, in Typescript tauchen und konfrontiert eine Mauer. Ich möchte zwei Strings vergleichen und um das Leben leichter zu machen, werden sie zuerst auf Kleinbuchstaben ausgerichtet. Dies ist der Code:Typescript String Vergleich Oddity mit String.toLowerCase

let bool: boolean = false; 
let i = 0; 
this.comparisons[++i] = " init bool " + " => " + bool; 

bool = false; 
if ("a" == "a") { bool = true }; 
this.comparisons[++i] = ' "a" == "a" ' + " => " + bool; 

bool = false; 
if ("a" == "b") { bool = true }; 
this.comparisons[++i] = ' "a" == "b" ' + " => " + bool; 

bool = false; 
if ("a" == "A") { bool = true }; 
this.comparisons[++i] = ' "a" == "A" ' + " => " + bool; 

bool = false; 
if ("a".toLowerCase == "A".toLowerCase) { bool = true }; 
this.comparisons[++i] = ' "a".toLowerCase == "A".toLowerCase ' + " => " + bool; 

bool = false; 
if ("a".toLowerCase == "B".toLowerCase) { bool = true }; 
this.comparisons[++i] = ' "a".toLowerCase == "B".toLowerCase ' + " => " + bool; 

und er druckt:

init bool => false 

"a" == "a" => true 

"a" == "b" => false 

"a" == "A" => false 

"a".toLowerCase == "A".toLowerCase => true 

"a".toLowerCase == "B".toLowerCase => true 

Warum der letzte Ausdruck bewertet, um wahr?

"a" == "b" sollte wie die dritte Aussage zu false auswerten.

Antwort

2

eine Methode aufrufen Sie die Klammern (), auch verwenden müssen, wenn es keine Argumente für die Methode zu übergeben:

bool = false; 
if ("a".toLowerCase() == "B".toLowerCase()) { bool = true }; 

Oder einfach:

bool = ("a".toLowerCase() == "B".toLowerCase()); 

Ohne die Klammern "a".toLowerCase ist einfach eine Referenz auf die String.toLowerCase Methode selbst. Das Ergebnis des Vergleichs ist true, weil es die beiden Methoden vergleicht und feststellt, dass sie in der Tat die gleiche Methode sind.

+0

gut, schnell gewinnen, danke! :) –

+0

Ein weiterer Hinweis für zukünftige Leser: Wenn Sie in Visual Studio Code programmieren, achten Sie auf die automatische Vervollständigung, da ** ** nicht ** die erforderliche '()' ab 2016-04-20 Version 1.0.0 hinzugefügt wird –