El resultado del siguiente código es Cat e indefinido. *Si la clave no existe, el resultado será "indefinido".
var animals = {"mammals":["Cat","Dog","Cow"]}; var groupA = animals.mammals[0]; var groupB = animals.birds; console.log(groupA ); console.log(groupB);Sin embargo, el resultado del siguiente código es "error" en lugar de "indefinido".
* TypeError no capturado: no se pueden leer las propiedades de undefined (leyendo '0')
var animals = { "mammals": ["Cat", "Dog", "Cow"] }; var groupA = animals.mammals[0]; var groupB = animals.birds[0]; console.log(groupA); console.log(groupB);Si la clave tiene un número ordinal que no existe, ¿cómo obtener un "indefinido"?
Puede utilizar el encadenamiento opcional
El operador de encadenamiento opcional (?.) le permite leer el valor de una propiedad ubicada en lo profundo de una cadena de objetos conectados sin tener que verificar que cada referencia en la cadena sea válida.
var animals = { "mammals": ["Cat", "Dog", "Cow"] }; var groupA = animals.mammals?.[0]; var groupB = animals.birds?.[0]; console.log(groupA); console.log(groupB);Primero debe evaluar el atributo, consulte a continuación:
var animals = {"mammals":["Cat","Dog","Cow"]}; var groupA = animals.mammals[0]; var groupB = (animals.birds || [])[0];Puede verificar la propiedad y establecer explícitamente ese valor con un ternario:
var animals = { "mammals": ["Cat", "Dog", "Cow"] }; var groupA = animals.mammals ? animals.mammals[0] : undefined; var groupB = animals.birds ? animals.birds[0] : undefined; console.log(groupA); console.log(groupB);