Foros del Web » Programando para Internet » Javascript »

Existencia de propiedades y metodos

Estas en el tema de Existencia de propiedades y metodos en el foro de Javascript en Foros del Web. Hola, tengo algunos problemas conceptuales con lo que devuelven ciertas instrucciones, por ejemplo , la propiedad coleccion document.all devuelve una coleccion con todos los objetos ...
  #1 (permalink)  
Antiguo 17/07/2008, 19:38
 
Fecha de Ingreso: marzo-2006
Mensajes: 329
Antigüedad: 18 años, 2 meses
Puntos: 1
Existencia de propiedades y metodos

Hola, tengo algunos problemas conceptuales con lo que devuelven ciertas instrucciones, por ejemplo , la propiedad coleccion document.all devuelve una coleccion con todos los objetos de la pagina, y document.getElementById devuelve un objeto especifico de acuerdo, entonces porque la siguiente instruccion me devuelve true si el explorador es mozilla:

var moz = document.getElementById && !document.all;

y porque devuelve un numero hexadecimal la siguiente instruccion que tambien ocupa un and logico(&&)

vof=document.title && document.alinkColor;


no deberia devolver verdadero si estas dos propiedades existen???, pero en vez de eso devuelve un numero hexadecimal ##ee0000 en mozilla y 0000ff en internet explorer, lo que no logro entender es porque en la variable moz devuelve true o false al preguntar por la existencia del metodo getElementById y por la propiedad coleccion document.all.
  #2 (permalink)  
Antiguo 18/07/2008, 00:47
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Existencia de propiedades y metodos

La respuesta es simple: Si una propiedad no existe (como ocurre con document.all) entonces document.all será undefined y !document.all será true.

Pero si existe, como ocurre con document.alinkColor, entonces no te devuelve true, te devuelve el valor que tenga. En este caso ese valor es el número que pones, que es el color de los enlaces.

En el primer caso al hacer document.getElementById && !document.all lo que hacemos es:
function && !undefined -> function && true -> true
En el segundo caso, haces document.title && document.alinkColor que es -> "*****" && #ee0000 -> true && #ee0000 -> #ee0000
  #3 (permalink)  
Antiguo 18/07/2008, 03:10
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Respuesta: Existencia de propiedades y metodos

Exacto, es como ha dicho venkman.

document.title te dirá si esa propiedad tiene un valor, no si esa propiedad funciona como esperas. Un código interesante:

Código PHP:
if( !document.all )
    
document.all "unodostres";
document.write(new Boolean(document.all)); 
En IE devolverá true porque document.all hace lo que se espera; pero en Firefox, por ejemplo, también devolverá true, porque es "undostres".

Así que aunque document.alinkColor no funcione, si tiene asignado un valor, devolvería true. De forma natural se puede comprobar de los siguientes modos:

Código PHP:
if( "all" in document )
if( 
document.hasOwnProperty("all") )
if( 
typeof document.all !== undefined 
Pero si le hemos asignado un valor anterior todas esas opciones devolverían true, así que es una buena duda. Supongo que habría que asignar el valor sabiendo antes si existe esa propiedad o no.

Me uno a la cuestión.



Saludos
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:42.