2010-10-22 13 views
10

he utilizado FireBug para probar los dos casos y parece bastante similares por resultado:¿Cuál es la diferencia entre {active: "yes"} y {"active": "yes"}?

>>> var x = {"active": "yes"} 
>>> x.active 
"yes" 
>>> var x = {active: "yes"} 
>>> x.active 
"yes" 

pero estoy bastante seguro de que hay alguna diferencia entre estos dos, tal vez incluso la diferencia de rendimiento relacionados. En pocas palabras: me gustaría saber si existe una diferencia entre {active: "yes"} y {"active": "yes"}.

Respuesta

28

Ambos son válidos. Sin embargo, hay ciertas palabras clave que no puede usar como delete, para evitar que las ajuste entre comillas para que el analizador de ECMAScript no las trate literalmente y, en su lugar, se especifiquen explícitamente como cadenas.

Además, el JSON spec requiere que las claves tienen comillas alrededor de ellos: comienza

Una cadena y termina con
comillas

Así {key:'value'} no es JSON válido, pero es JS válidos, mientras {"key":"value"} es JS y JSON válidos.

ejemplos de palabras clave y no válidos teclas/ambiguos:

>>> ({delete:1}) 
SyntaxError: Unexpected token delete 
>>> ({'delete':1}) 
Object 

Otro ejemplo:

>>> ({first-name:'john'}) 
SyntaxError: Unexpected token - 
>>> ({'first-name':'john'}) 
Object 
>>> ({'first-name':'john'})['first-name'] 
"john" 
+3

También muchos análisis JSON no manejarán los atributos sin comillas. En Chrome, por ejemplo: 'JSON.parse ('{" a ": 3}')' está bien, 'JSON.parse ('{a: 3}')' genera una excepción. –

+2

En realidad '{" clave ": 'valor'}' no es JSON válido debido al requisito de comillas dobles para las claves y los valores _string_. – mogsie

+0

@Marcel J .: Muchos analizadores de JSON no lo manejarán porque '{a: 3}' no es JSON válido. – Thanatos

11

Ambos son válidos JavaScript (aunque algunos nombres sólo se puede utilizar citados, active no está entre ellos)

El último es JSON no válido (los nombres citados son obligatorios en JSON).

+4

+1, la distinción importante es que uno es JSON y el otro no. – molf

+3

@molf: tampoco son técnicamente JSON;) –

+0

@Roatin: ¿Perdón? ¿Qué no es JSON acerca de '{" active ":" yes "}'? –

2

En JavaScript, {"active": "yes"}, {'active': "yes"}, {"active": 'yes'} y {active: 'yes'} son todos iguales - si está utilizando una palabra clave reservada (como se señala meder), que debe cita de la llave - de lo contrario, la clave no necesita Ser citado.

En JSON, por el contrario todas las claves y valores debe citarse con ".
{"active": "yes"} es JSON válido.
{'active': "yes"}, {"active": 'yes'} y {active: 'yes'} no lo son.

+2

JSON solo reconoce '" 'para comillas, por lo que solo el primer ejemplo es JSON válido. – Quentin

+0

@David - ¡corregido, gracias por la captura! –

+1

' {"active": 'yes'} 'aún no es válido. Las reglas de cita son para todas las cadenas, no solo para los nombres clave. JSON tiene una clara falta de TMTOWTDI :) – Quentin

0

Si está utilizando esto para JSON, el nombre (active) debe estar entre comillas. Todavía funcionará en JavaScript sin él, pero está técnicamente malformado JSON.
Ver: http://json.org/
Tenga en cuenta que el object, requiere un string para el nombre (el bit antes de los dos puntos).

3

Cada JSON válida también es válido JavaScript pero no todas JavaScript válida también es válido JSON como JSON es un subconjunto propio de JavaScript:

JSON ⊂ JavaScript

JSON requiere los nombres de nombre/pares de valores a ser citados, mientras que JavaScript no (siempre y cuando no sean palabras clave reservadas).

Así que su primer ejemplo {"active": "yes"} es JSON válido y JavaScript válido, mientras que el segundo ejemplo {active: "yes"} es solo JavaScript válido.

Cuestiones relacionadas