2011-03-15 17 views
17

Estoy tratando de usar "para" como nombre de propiedad del objeto. Parece funcionar bien en IE7, IE8, Firefox, Chrome y Opera, pero aparentemente no en Safari.Compatibilidad con el navegador para utilizar una palabra reservada como nombre de propiedad en JavaScript

Según tengo entendido, ECMAScript 5 lo permite (como se explica en JavaScript keywords in hash keys).

¿Puedo obtener una lista definitiva de navegadores que admitan/no admitan esto en alguna parte?

EDITAR: En realidad, la autocadenación de nombres de propiedades de palabras reservadas de CoffeeScript es lo que me llevó a creer que funciona. Después de volver a realizar las pruebas correctamente, parece que no funciona en ninguna parte, por lo que la pregunta ahora es: ¿hay navegadores que lo permitan según la especificación ECMAScript 5?

+9

No sería justo ser más fácil de cambiar el nombre de la propiedad? – jondavidjohn

+11

Creo que hubiera sido seguro asumir que soy consciente de la posibilidad de cambiar el nombre de la propiedad. A veces las personas tienen curiosidad, ¿sabes? –

Respuesta

21

Hay un soporte de navegador que muestra la tabla de ECMAScript 5 características aquí: http://kangax.github.com/es5-compat-table/

palabras reservadas se pueden utilizar como nombres de propiedad en IE9, Firefox y Chrome 3.5 + 7 +, Safari 5.1+.

15

Puede usar esas palabras, pero solo como cadenas y no como propiedades abreviadas.

foo['class']; // cool 
foo.class; // not cool 

Pero esta es la lista real que usted solicitó. Ninguno de estos puede usarse a través de la sintaxis de puntos de propiedad. https://web.archive.org/web/20140902235313/http://javascript.about.com/library/blreserved.htm


Además, sólo ligeramente tangencial, CoffeeScript da cuenta de esto y de auto ellas stringifies para usted. http://jashkenas.github.com/coffee-script/#literals

de entrada:

$('.account').attr class: 'active' 
log object.class 

JS Ouptput:

$('.account').attr({ 
    "class": 'active' 
}); 
log(object["class"]); 

Sucede que creo que es bastante Dang ordenada.

+0

En realidad, estaba tratando de averiguar qué navegadores permiten el uso de palabras reservadas como nombres de propiedad, en su caso. ¿Hay una lista en algún lado? Sin embargo, +1 por mencionar CoffeeScript. La cadena automática me llevó a creer que funcionó en la mayoría de los navegadores. –

+0

La implementación que no es JSR223 del motor JavaScript de Mozilla Rhino hace esto cuando el script arroja una excepción JavaException. Si necesita hacer una lógica especial para manejarlo, debe verificar exception.javaException ["clase"]. Nombre para ver si coincide con el nombre de la clase Java de la excepción específica que está buscando. – sworisbreathing

+2

'Ninguno de estos puede usarse a través de la sintaxis de punto de propiedad. Pueden en ES6. Vea el uso de la palabra clave 'catch' como nombre de función en los objetos' Promise'. –

-3

después del estudio, creo que puedo probar que usar palabras reservadas como nombres de propiedades (si se hace con un poco de sentido común) es inofensivo, ya sea en la sintaxis obj['name'] o obj.name.

ver this stackoverflow question

+3

No es cierto. En IE8, '' 'SomeClass.delete = function()' '' hace que se genere un error de script. –

+0

¡listo! aunque estoy de acuerdo en que no se recomienda, ¿es ese el estándar de comportamiento? No he usado, por ejemplo, en años y años, por lo que no estoy familiarizado con ese cuello del bosque. –

+1

IE9 y versiones posteriores parecen permitirnos usar correctamente palabras clave como propiedades, por lo que creo que esto cae en el campo de problemas "maldito IE7/8". –

4

Tal vez la cuestión no es tanto si las palabras reservadas se pueden utilizar como nombres de las propiedades de los objetos - que pueden. Parece que la verdadera pregunta aquí es si se pueden usar desnudos (es decir, sin vestir entre comillas). El uso desnudo de las palabras reservadas es soportado desde ES5 en adelante, pero aún no todos los intérpretes soportan las características de ES5. Como se ha mencionado, hay una buena mesa aquí ...

http://kangax.github.io/es5-compat-table/#Reserved%20words%20as%20property%20names

Si sólo está haciendo algo de código en NodeJS, entonces usted no tiene que preocuparse por este tipo de problema. Si le importa la portabilidad de su código en una amplia variedad de entornos (sin utilizar un lenguaje como CoffeeScript que compila en JavaScript), entonces su código debe citar las palabras reservadas ...

definiendo ...

var foo = {'for':'this works'}; 

acceso a ...

foo ['for']; 
+0

Mejor respuesta imho. –

Cuestiones relacionadas