2010-10-16 20 views
13

in javascript:pythons hasattr in Javascript?

d={one: false, two: true} 
d.one 
d.two 
d.three 

Ich möchte zwischen d.one und d.three unterscheiden zu können. Standardmäßig werden beide als falsch bewertet, aber in meinem Fall sollten sie nicht gleich behandelt werden.

Antwort

21

Sie können Sie wollen wahrscheinlich hasOwnProperty

"one" in d // or "two", etc 

oder

d.hasOwnProperty("one") 

tun, wie der in Operator auch wahr zurück, wenn das Grundstück, auf dem ein Objekt in der Prototypkette ist. z.B.

"toString" in d // -> true 

d.hasOwnProperty("toString") // -> false 
+0

+1 ist. 'hasOwnProperty' für das Behandeln eines' Objekts' als eine allgemeine Zeichenfolge-> Wert-Suche; 'in', wenn Sie beispielsweise nach Funktionen suchen. – bobince

0

Die Werte sind nicht unbedingt falsch:

js> d={one: false, two: true} 
[object Object] 
js> d.one == false 
true 
js> d.three == false 
false 
js> d.three === false 
false  
js> d.three === undefined 
true 
js> 'three' in d 
false 
js> 'one' in d 
true 

Auch hierzu finden Sie Kommentare von olliej und Ken unten.

+0

sie sind "falsch"! – olliej

+0

@ollej: Ja, sicher. Ich habe die Sprache geändert, um das klarer zu machen. – ars

+1

Ihre Antwort ist auf dem richtigen Weg, aber diese Beispiele sind in gewisser Weise irreführend, zumal Sie immer noch den Typzwang-induzierenden Operator '== verwenden. Um es auszuarbeiten, wäre "d.drei === null" "falsch", aber "d.drei ==undefiniert" wäre "wahr" (würde aber sicherer getestet werden als "typeof d.three ===" undefined "', da 'undefined' auf mysteriöse Weise * kein * reserviertes Wort ist. In diesem Fall wäre auch einfach "! D.dree" "wahr". Dies liegt daran, dass 'null == false == undefined == 0 == "" '- all diese Dinge sind falsch. –

-1

Nun, d.one ist false und d.three ist undefined.

var d={one: false, two: true}; 
alert("one: " + d.one + "\nthree: " + d.three); 
    // Output: 
    // one: false 
    // three: undefined 

Try it out with this jsFiddle

Javascript hat einige flippige true false Auswertung manchmal haben, aber dies ist nicht eine jener Situationen:

alert(d.three == false);           // alerts false 

To check for undefined you can use typeof

if (typeof something == "undefined") 

Oder Sie können überprüfen, ob three eine Eigenschaft von d

if (d.hasOwnProperty("three"));