Foros del Web » Programando para Internet » Javascript »

chrome toma como definida variable no definida

Estas en el tema de chrome toma como definida variable no definida en el foro de Javascript en Foros del Web. según chrome la variable "estado" está definida Cita: function fnc() { if (typeof(estado) == "undefined" || estado == 0) { estado = 1; }else{ estado ...
  #1 (permalink)  
Antiguo 31/08/2011, 16:09
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
chrome toma como definida variable no definida

según chrome la variable "estado" está definida
Cita:
function fnc() {
if (typeof(estado) == "undefined" || estado == 0) {
estado = 1;
}else{
estado = 0;
}
alert(estado);
}
los demás navegadores se comportan con lógica, pero chrome .... en este caso no. la primera vez que invoco la función me levanta que el valor de la variable es 0, cuando tendría que ser 1

gracias

Última edición por IsaBelM; 15/01/2016 a las 06:42
  #2 (permalink)  
Antiguo 31/08/2011, 16:22
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: chrome toma como definida variable no definida

buenas!
creo que es un error de lógica de tu parte y me extraña que según tu en otro navegadores funciona distinto a chrome. fijate que estas usando el operador typeof el cual (a mi entender) puede tomar un identificador que no este previamente definido. por tanto, typeof estado devuelve "undefined", el cual luego evalua a true en la condición de if.



@edit, no se si lei bien, pero creo que lei algo al reves!
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 31/08/2011, 16:31
Avatar de laratik  
Fecha de Ingreso: mayo-2010
Ubicación: Cali
Mensajes: 317
Antigüedad: 13 años, 11 meses
Puntos: 63
Respuesta: chrome toma como definida variable no definida

Cita:
Iniciado por IsaBelM Ver Mensaje
<solución>
para chrome es tipo object, así que sólo hay añadir
</solución>
¿En que versión Chrome hace eso? probe tu función en la versión 13.0.782.218 m y me ha funcionado perfectamente, tanto si hago esto:

Código Javascript:
Ver original
  1. function fnc() {
  2. if (typeof(estado) == "undefined" || estado == 0) {
  3. estado = 1;
  4. }else{
  5. estado = 0;
  6. }
  7. alert(estado);
  8. }
  9.  
  10. onload = fnc;

resultado 1

Tanto como para

Código Javascript:
Ver original
  1. function fnc() {
  2. if (typeof(estado) == "undefined" || estado == 0) {
  3. estado = 1;
  4. }else{
  5. estado = 0;
  6. }
  7. alert(estado);
  8. }
  9.  
  10. onload = function() {
  11.     fnc();
  12.     fnc();
  13. };

resultado 1 y luego 0.

Así que me atrevo a pensar que el objeto lo estas arrastrando desde antes de invocar la función... lo que me extraña es que en otros navegadores si tengas los resultados deseados.

Se me adelanto @zerokilled. Los posibles valores de retorno del operador typeof son: undefined, boolean, number, string para cada uno de los tipos primitivos y object para los valores de referencia y también para los valores de tipo null.
__________________
Programar apasiona y lo que apasiona es un arte, por lo tanto programar es un arte.

Quiero karma para en mi próxima vida ser un billonario bien dotado con alas.

Última edición por laratik; 31/08/2011 a las 16:40
  #4 (permalink)  
Antiguo 31/08/2011, 16:57
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: chrome toma como definida variable no definida

gracias por interesaros

estoy totalmente de acuerdo con vosotros. typeof() debería devolver "undefined" y luego "number", pero devuelve "object" y luego "number"

laratik, la versión es la misma que la tuya

os he montado un pequeño ejemplo por si al caso no me hice entender
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; http-equiv="Content-Type" charset=utf-8"/>
<title></title>
<script type="text/javascript">
function fnc() {
alert('el tipo es ' +typeof(estado))
if (typeof(estado) == "undefined" || estado == 0) {
estado = 1;
}else{
estado = 0;
}
}

function fnc2() {
alert(estado);
}

function escucha() {
if(document.getElementById('evento').addEventListe ner) {
document.getElementById('evento').addEventListener ('click', fnc, false);
document.getElementById('estado').addEventListener ('click', fnc2, false);
} else {
document.getElementById('evento').attachEvent('onc lick', fnc);
document.getElementById('estado').attachEvent('onc lick', fnc2);
}
}

window.onload = function() {escucha()};
</script>
</head>
<body>
<h3>al pulsar el botón evento y luego el otro devuelve 1. al hacer el mismo proceso otra vez devolverá 0</h3>
<form>
<input type="button" id="evento" value="evento" />
<input type="button" id="estado" value="está activo el botón evento?" />
</form>
</body>
</html>

Última edición por IsaBelM; 15/01/2016 a las 06:47 Razón: eliminar la corrección para continuar con el flujo del tema
  #5 (permalink)  
Antiguo 31/08/2011, 17:00
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: chrome toma como definida variable no definida

Lamentablemente no es un bug, para el que quiera seguir leyendo, acá se habla del tema.

Cita:
What is supposed to happen is that ‘named elements’ are added as apparent properties of the document object. This is a really bad idea, as it allows element names to clash with real properties of document
__________________
blog | @aijoona
  #6 (permalink)  
Antiguo 31/08/2011, 17:05
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: chrome toma como definida variable no definida

me imaginaba por donde iba el problema pero no estaba seguro. verás, chrome adopto una maldición de iexplorer: crear variables automaticamente de elementos con id. fijate que tienes un elemento con id "estado". al igual que iexplorer, chrome genera la variable estado para dicho elemento. hacia tiempo que ya sabia de este comportamiento en chrome, pero lo que no recuerdo es si chrome limita esa característica según el contexto.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #7 (permalink)  
Antiguo 31/08/2011, 17:18
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: chrome toma como definida variable no definida

pues ya está, hay que cambiar la id

gracias por vuestra colaboración
  #8 (permalink)  
Antiguo 01/09/2011, 00:12
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: chrome toma como definida variable no definida

pero que cosa tan fea. Ahora resulta que chrome es el nuevo IE jaja
__________________
twitter: @imbuzu
  #9 (permalink)  
Antiguo 01/09/2011, 04:39
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: chrome toma como definida variable no definida

Cita:
Iniciado por buzu Ver Mensaje
pero que cosa tan fea. Ahora resulta que chrome es el nuevo IE jaja
al menos la versión 8 de ie no está creando el objeto con id como variable
  #10 (permalink)  
Antiguo 01/09/2011, 05:00
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: chrome toma como definida variable no definida

pues, yo tengo la version 8 y acabo de hacer una prueba. la verdad, no ha cambiado nada. al menos no a mi.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #11 (permalink)  
Antiguo 01/09/2011, 05:29
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: chrome toma como definida variable no definida

que extraño!! acabo de probarlo de nuevo y ie8 me devuelve "undefined" al igual que ff y opera. chome y safari devuelve "object"
  #12 (permalink)  
Antiguo 02/09/2011, 01:21
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: chrome toma como definida variable no definida

curioso, ahora tenemos problemas de identidad con IE8. Uno no puede imaginarse cosa más fea. Yo creo que lo mejor es ignorar definitivamente este aspecto de esto nabegadores.

Pasando a otra cosa, si chrome y safari debuelven object, eso quiere decir que tiene que ver con webkit? o estamos viendo un incremento en los navegadores que implementan este comportamiento? Personalmente no creo que sea webkit, pero uno nunca sabe.
__________________
twitter: @imbuzu
  #13 (permalink)  
Antiguo 02/09/2011, 04:33
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: chrome toma como definida variable no definida

Lo malo de este problema es que es completamente inesperado para el que no lo conoce. Cuando lo sufrio un compañero estaba seguro de que el framework (Seam) le estaba contaminando el contexto.
__________________
blog | @aijoona
  #14 (permalink)  
Antiguo 05/09/2011, 13:58
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: chrome toma como definida variable no definida

Lo peor de todo es que puedes concer el lenguaje al derecho y al revez, y aun así no sabrás de este comportamiento hasta que te lo topes personalmente o leas algo como este hilo.
__________________
twitter: @imbuzu
  #15 (permalink)  
Antiguo 28/03/2012, 12:56
 
Fecha de Ingreso: enero-2012
Ubicación: Santiago de Surco, Lima - Perú
Mensajes: 266
Antigüedad: 12 años, 3 meses
Puntos: 57
De acuerdo Respuesta: chrome toma como definida variable no definida



Difundiré este hilo.

Temas como estos son de gran ayuda!
  #16 (permalink)  
Antiguo 10/10/2012, 17:03
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: chrome toma como definida variable no definida

Cita:
Iniciado por IsaBelM Ver Mensaje
según chrome la variable "estado" está definida

los demás navegadores se comportan con lógica, pero chrome .... en este caso no. la primera vez que invoco la función me levanta que el valor de la variable es 0, cuando tendría que ser 1

gracias

<solución>
para chrome es tipo object, así que sólo hay añadir
</solución>
lei todos, tambien a mi me pasan ese tipo de cosas con chrome, como por ejemplo ejecutar 2 veces una funcion al recargar que solo deberia ejecutar una vez como los demas exploradores..
sabes a veces es que chrome guarda en cache las variables.. varias veces me pasaba asi y yo borre la cache de chrome y todo regreso a la normalidad.
no es una solución pero puede ser un motivo, por que, que va a saber el usuario de andar borrando caches.
un saludo..!

Etiquetas: chrome, toma, variables
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 23:45.