Pregunta

Estoy incursionando en un proyecto de Javascript de lingüística. Me gustaría construirlo usando objetos para representar sustantivos y funciones para almacenar verbos, ya que esto hace que conceptualizar mi proyecto sea menos difícil. Estoy usando funciones como claves para un objeto (he escrito un ejemplo a continuación). ¿Será posible serializar esto con JSON cuando llegue el momento de guardar los datos?

function verbFn() {
   //do something
}

var nouns = {};

nouns[verbFn] = 'some value';

En este ejemplo, ¿JSON podrá serializar " sustantivos " ;?


Uh ... después de reflexionar sobre mi pregunta original y leer los comentarios, llegué a la conclusión de que tratar de hacer las cosas de esta manera es muy incorrecto y tonto.

¿Fue útil?

Solución

No, JSON no puede hacer esto. Las claves deben ser cadenas entre comillas dobles.

También parece que en realidad no está utilizando la función como una clave: se está convirtiendo en una cadena:

<script>

var x = {};
x[window.open] = true;

for (var i in x)
    alert(typeof i + '\n' + i); // typeof i == string

</script>

Otros consejos

De acuerdo con los estándares no, no puede. La clave tiene que ser una cadena

en realidad no estás usando funciones como teclas, estás usando la conversión de cadenas de una función como tecla, lo que también se basa implícitamente en que esas representaciones de cadenas son únicas. Para las plataformas que admiten funciones de descompilación, esto funciona bien, pero en teoría podría haber implementaciones que simplemente devuelvan " [function] " lo cual sería bastante malo en tu caso.

JSON es una sintaxis de estructura de datos. Una función no son datos, por lo que no hay forma de que se pueda serializar como parte de una estructura de datos (clave o de otro tipo). Independientemente del idioma, la implementación o cualquier otra cosa.

No, las teclas siempre deben ser cadenas y nada más. Consulte la descripción estándar .

Y sustantivos no es una matriz, es un mapa, una tabla hash, una matriz asociativa, " objeto " ;, uno de esos, sea cual sea el nombre que prefiera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top