2017-03-08 1 views
0

Überprüfen Sie bitte folgenden CodeJavaScript Globale Objekte String Vs int

var global_var = 1; 
 
hello = 'hello'; 
 
global_novar = 2; 
 

 
(function() { 
 
    global_fromfunc = 3; 
 
}()); 
 

 

 

 
var global = Object.getOwnPropertyNames(window); 
 
    
 
console.log(global_var in global); 
 
console.log(global_novar in global); 
 
console.log(global_fromfunc in global); 
 
console.log(hello in global);

hier nur letzte Anweisung Druck falsch auf der Konsole. Wenn ich hallo einen ganzzahligen Wert zuweise, wird der Wert true ausgegeben. Kann jemand dieses Verhalten erklären

+1

Was ist das Ergebnis, das Sie zu sehen erwartet hatten? –

+0

Ich frage mich auch, ob Sie den Parameter zum Schlüsselwort in zitieren wollten. d. h. '' 'global_var' in global'' nicht '' global_var in global''. –

+0

Danke. Ich habe den Code hier korrigiert. – Aniruddha

Antwort

0

Der in Operator in JavaScript gibt true zurück, wenn die angegebene Eigenschaft im angegebenen Objekt ist.

Wenn Sie den in Operator auf einen Array verwenden, wie Sie oben tun, die Indizes des Arrays als seine Eigenschaften handeln, damit Ihre Aussage wahr zurück, wenn das Feld den Index gegeben enthält. Dies erklärt, warum, wenn Sie eine Integer-Zahl angeben, sie true zurückgibt (solange das Array diesen Index enthält), aber jede Zeichenfolge gibt false zurück.

das Ergebnis erhalten Sie suchen, können Sie Array.prototype.includes verwenden, die in ECMAScript 7 eingeführt wurde (für Browser, die es unterstützen) oder beziehen sich auf this question für mehr Möglichkeiten, wie Sie überprüfen, ob ein bestimmtes Objekt in einem Array enthalten ist .

var global_var = 1; 
 
hello = 'hello'; 
 
global_novar = 2; 
 

 
(function() { 
 
    global_fromfunc = 3; 
 
}()); 
 

 

 

 
var global = Object.getOwnPropertyNames(window); 
 

 
console.log(global.includes('global_var')); 
 
console.log(global.includes('hello')); 
 
console.log(global.includes('global_novar'));  
 
console.log(global.includes('global_fromfunc'));

+0

Vielen Dank für die Anweisung zu 'Array.prototype.includes'. Nun benutze ich in, wenn ich Hallo = 100, dann console.log (Hallo in global) gibt true zurück. Wenn jedoch hallo = 1000 ist, wird false zurückgegeben. – Aniruddha

+0

Das liegt daran, dass Ihr Array 'global' keine 1001 Elemente enthält, daher ist Index 1000 im Array nicht vorhanden, 100 ist. 'in' wird true zurückgeben, wenn der Index im Array vorhanden ist, nicht wenn die Variable' hallo' vorhanden ist. –

2

Object.getOwnPropertyNames gibt ein Array von Eigenschaftsnamen zurück. Der Operator in interspiert die Indizes des Arrays, nicht dass es ein string ist. Beachten Sie, wenn ich hello groß mache, genug, es false zurückgibt.

var global_var = 1; 
 
hello = 270000000; 
 
global_novar = 2; 
 

 
(function() { 
 
    global_fromfunc = 3; 
 
}()); 
 

 

 

 
var global = Object.getOwnPropertyNames(window); 
 
console.log(global_var in global); 
 
console.log(global_novar in global); 
 
console.log(global_fromfunc in global); 
 
console.log(hello in global);

Beachten Sie auch, dass in nicht das gleiche ist wie ein Array enthält.

+0

:) ok. Daran habe ich nicht gedacht. Vielleicht macht der Browser etwas zur Optimierung. Ich werde mehr Suche auf diesem .. – Aniruddha