A menudo vi in operator en alguna biblioteca de Javascript. pero creo que in operador tiene riesgo de causar errores humanos. porque tenemos que escribir el nombre de la propiedad como tipo de cadena.
Creo que el encadenamiento opcional podría ser una alternativa in operador y parece más seguro. podemos obtener ayuda de inteligencia de IDE durante la escritura de código.
¿Cuál es el beneficio de usar palabras clave in lugar de Optional Chaining ?
AFAIK, in se usa para saber si la propiedad existe en un objeto o su prototipo o no.
const address = { zipCode: 1234, country: 'usa', city: 'new York', }; if ('zipCode' in address) { console.log('This is address from in checking'); }y si está utilizando un encadenamiento opcional, entonces está verificando que el valor sea verdadero o no
const address = { zipCode: 1234, country: 'usa', city: 'new York', }; if (address?.zipCode) { console.log('This is address from optional chaining'); } Pero piense en una situación en la que el valor de esa propiedad es un valor falsy , entonces el operador in le dará el resultado de la existencia de la propiedad. Si el valor es un valor falso, debe realizar comprobaciones adicionales para saber si la propiedad existe o no.
El valor puede ser cualquier cosa, por lo que debe realizar las comprobaciones necesarias en el
optional chaining
const address = { zipCode: 0, country: 'usa', city: 'new York', }; if ('zipCode' in address) { console.log('This is address from in checking'); } if (address?.zipCode) { // Won't work console.log('This is address from optional chaining'); } if (address?.zipCode || address?.zipCode === 0) { // Will work with extra checks console.log('This is address from optional chaining'); }Estás comparando 2 cosas diferentes.
En su contexto, el operador in es similar a Object.hasOwnProperty y su valor devuelto es verdadero/falso.
const address = { zipCode: 123 } console.log('zipCode' in address) //true console.log(address.hasOwnProperty('zipCode')) //trueEl encadenamiento opcional es verificar valores indefinidos opcionalmente
//the short form of `address && address.zipCode` console.log(address?.zipCode) //false - because no `address` variable Puede considerar este caso en el que la propiedad zipCode está ahí pero su valor no está undefined
const address = { zipCode: undefined } console.log('zipCode' in address) //true console.log(address?.zipCode) //undefined! En el ejemplo anterior, puede ver que zipCode está en address , pero el encadenamiento opcional no lo ayuda a verificarlo, sino que devuelve su valor.
¿Cuál es el beneficio de usar palabras clave
inlugar deOptional Chaining?
En la conclusión, debe usar in cuando desee verificar que las propiedades de ese objeto existan o no. En otros casos, puede usar el encadenamiento opcional no solo para verificar la disponibilidad de la propiedad, sino también sus valores ( 0 , null e undefined ).