2010-11-16 23 views
5

Recibo un extraño error en Chrome ... mira la siguiente captura de pantalla.No se puede establecer la propiedad ... de undefined --- bizarre

Defino el registro utilizando la sintaxis literal del objeto.

Intento establecer la propiedad "id" y obtener la excepción.

He intentado tanto:

record['id'] = 'wtf'; 

y también

record.id = 'wtf'; 

utilizo este tipo de sintaxis por todo el lugar en mi guión .... lo que podría estar sucediendo aquí? ¿Es esto un error en Chrome?

alt text

EDIT: he resuelto el problema por ahora, pero todavía no estoy seguro de por qué esto está ocurriendo. Moví la definición de registro para que ocurra fuera del bloque if. Alguien sabe lo que podría estar ocurriendo? Pensé que todas las declaraciones de variables tenían un alcance para la función y, por lo tanto, esto no debería ser un problema.

+0

No puedo reproducir el error (en Chrome 7 y Firefox en Mac). A partir de la información aquí y la captura de pantalla, parece que no hay nada de malo en tu código. ¿Cuál es el valor de 'record' justo antes de la línea" errónea "? – nickf

Respuesta

15

El problema es muy probable que dl sea menor o igual que cero, por lo que la instrucción que inicializa record no se ejecuta. Desde su sangría, parece que pretendía que ambas declaraciones formen parte del bloque if, pero sin llaves, la instrucción record['id'] = 'wtf'; se ejecuta sin importar qué.

Al mover la inicialización variable fuera de la instrucción if, la forzó a pasar en cualquier caso y movió la asignación dentro del bloque if (que, supongo que es lo que quería).

Probablemente una mejor manera de resolverlo es la adición de los apoyos de esta manera:

if (dl > 0) { 
    var record = {}; 

    record.id = 'wtf'; 
} 

A menos que usted realmente desea inicializar record en ambos casos.

estás en lo correcto acerca de variables declaraciones ser de ámbito de la función, pero la asignación de no sucede hasta llegar a ese punto en el código. record estaba dentro del alcance, pero todavía tenía su valor predeterminado de undefined porque aún no le había asignado nada.

+0

Wow. Algunos errores son autoinfligidos. Buena atrapada ! – rvandervort

0

Funciona para mí, no hay razón por la que no debería funcionar. ¿Estás seguro de que se está refiriendo a esa línea exacta? ¿Qué pasa si alert(record) antes de configurarlo? ¿Has intentado depurarlo todavía?

+0

En realidad, creo que he resuelto el problema hace un momento ... pero todavía no estoy seguro de por qué sucede esto. Moví la definición de registro fuera del bloque if y parece funcionar ... Actualizaré la pregunta principal. – rvandervort

+0

@rvandervort: si descubres la causa, ¡asegúrate de compartir el motivo! – nickf

Cuestiones relacionadas