Lo que quiero es algo como lo siguiente:
let x=32 let y=x===32 ?: 7;Mi ejemplo de la vida real sería más como el siguiente:
inlineFunction(parameterWithLongNameIAmTesting===20000?parameterWithLongNameIAmTesting:anotherLongNameVariable); Básicamente cortocircuitando el ternario. Quiero que y sea igual a x si, y solo si, x === 32. En el caso anterior, el valor asignado a y sería 32. Sin embargo, si hubiera asignado x igual a 50 o cualquier otra cosa, entonces y sería igual a 7.
¿Hay una forma integrada en javascript para hacer esto?
Usarías 32 o x como el segundo operando:
let y = x === 32 ? x : 7;Re:
La razón por la que busco esto es que en la situación de la vida real que estoy usando, la expresión real se vería así:
inlineFunction(parameterWithLongNameIAmTesting===20000?parameterWithLongNameIAmTesting:anotherLongNameVariable);Simplemente se ve muy desordenado de esa manera.
Si es solo el desorden, puede formatearlo más claramente (en mi humilde opinión) ( SharedRory también hace esta sugerencia ):
inlineFunction( parameterWithLongNameIAmTesting === 20000 ? parameterWithLongNameIAmTesting : anotherLongNameVariable );O si no le gustan los nombres largos repetidos, puede usar una const local:
const x = parameterWithLongNameIAmTesting; inlineFunction(x === 20000 ? x : anotherLongNameVariable);¿Hay una forma integrada en javascript para hacer esto?
Nada más que el operador condicional anterior, o un if / else . Dijiste en un comentario que pensabas que se había agregado algo. Podría estar pensando en un encadenamiento opcional ( let y = something?.prop; ) que provoca un cortocircuito si something es null o undefined , lo que resulta en undefined en lugar del error que sería something.prop . Pero eso no se aplica aquí.
Dado que agregó un ejemplo, es común ver lo siguiente en una gran cantidad de código porque es fácil de leer y no todo en una sola línea.
inlineFunction( parameterWithLongNameIAmTesting === 20000 ? parameterWithLongNameIAmTesting : anotherLongNameVariable );También los formateadores suelen hacer esto también.
No listo para usar, pero puede usar una función como
eq = (a, b) => a === b ? a : undefineden combinación con el operador coalescente nulo. Ejemplo:
eq = (a, b) => a === b ? a : undefined test = 20000 defaultValue = 333 res = eq(test, 20000) ?? defaultValue console.log(res) test = 4444 defaultValue = 333 res = eq(test, 20000) ?? defaultValue console.log(res)Como es habitual con las funciones, la ventaja es que puedes usarlas con expresiones arbitrarias, no solo con variables, por ejemplo:
return eq(computeChecksum(file), getStoredChecksum()) ?? '<failed>'