2010-10-16 18 views
13

en javascript:python's hasattr en javascript?

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

Quiero ser capaz de diferenciar entre d.one y d.three. Por defecto ambos evalúan a falso, pero en mi caso no deberían ser tratados de la misma manera.

Respuesta

21

Usted puede hacer

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

o

d.hasOwnProperty("one") 

es probable que desee hasOwnProperty como el operador in también devolverá verdadero si la propiedad está en el un objeto en la cadena de prototipo. p.ej.

"toString" in d // -> true 

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

+1. 'hasOwnProperty' para cuando trata un' Objeto 'como una búsqueda de valor de cadena de uso general; 'in' para cuando estás buscando capacidades de instancia. – bobince

0

Los valores no son estrictamente falsa:

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 

También, ver los comentarios de acuerdo olliej y Ken abajo.

+0

¡son "falsey"! – olliej

+0

@ollej: sí, claro. He modificado el lenguaje para aclararlo. – ars

+1

Su respuesta está en el camino correcto, pero estos ejemplos son un tanto engañosos, especialmente porque todavía está utilizando el operador '==' de inducción de coerción de tipo en todos los casos. Para elaborar, 'd.three === null' sería' false', pero 'd.three === undefined' sería' true' (pero sería más seguro probarlo como 'typeof d.three ===" undefined "', ya que 'undefined' es misteriosamente * not * una palabra reservada). Para el caso, simplemente '! D.three' también sería' verdadero'. Esto es porque 'null == false == undefined == 0 ==" "' - todas estas cosas son falsey. –

-1

Bueno, d.one es false y d.three es 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 tiene algo de cobarde verdadera evaluación falsa a veces, pero esto no es una de esas situaciones:

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

To check for undefined you can use typeof

if (typeof something == "undefined") 

O se puede comprobar si three es una propiedad de d

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