functions - string variable javascript
¿Qué significa "opciones=opciones ||{} "Significa en Javascript? (5)
Esta pregunta ya tiene una respuesta aquí:
- ¿Qué significa el constructo x = x || ¿significa? 11 respuestas
El otro día recibí un fragmento de código que me provocó curiosidad, pero no estoy muy seguro de lo que realmente hace;
options = options || {};
Mi pensamiento hasta ahora; establece las options
variables para valorar las options
si existen, si no, establece en el objeto vacío.
¿Si no?
Es el patrón predeterminado ...
Lo que tienes en tu fragmento es la forma más común de implementar el patrón por defecto , devolverá el valor del primer operando que produce un valor verdadero cuando se convierte a booleano.
var some_data = undefined;
var some_obj_1 = undefined;
var some_obj_2 = {foo: 123};
var str = some_data || "default";
var obj = some_obj1 || some_obj2 || {};
/* str == "default", obj == {foo: 123} */
lo anterior es básicamente equivalente a hacer la siguiente alternativa más detallada
var str = undefined;
var obj = undefined;
if (some_data) str = some_data;
else str = "default";
if (some_obj1) obj = some_obj1;
else if (some_obj2) obj = some_obj2;
else obj = {};
ejemplos de rendimiento de valores por el operador OR lógico:
1 || 3 -> 1
0 || 3 -> 3
undefined || 3 -> 3
NaN || 3 -> 3
"" || "default" -> "default"
undefined || undefined -> undefined
false || true -> true
true || false -> true
null || "test" -> "test"
undefined || {} -> {}
{} || true -> {}
null || false || {} -> {}
0 || "!!" || 9 -> "!!"
Como puede ver, si no se encuentra coincidencia, el valor del último operando es yield.
¿Cuándo es esto útil?
Hay varios casos, aunque el más popular es establecer el valor predeterminado de los argumentos de la función, como se muestra a continuación:
function do_something (some_value) {
some_value = some_value || "hello world";
console.log ("saying: " + some_value);
}
...
do_something ("how ya doin''?");
do_something ();
saying: how ya doin''?
saying: hello world
Notas
Esta es una de las diferencias que JavaScript tiene en comparación con muchos otros lenguajes de programación populares.
El operador ||
no genera implícitamente un valor booleano, pero conserva los tipos de operandos y produce el primero que se evaluará como verdadero en una expresión booleana.
Muchos programadores que provienen de idiomas en los que este no es el caso (C, C ++, PHP, Python, etc.) encuentran esto bastante confuso al principio, y por supuesto siempre sucede lo contrario; las personas que provienen de javascript ( perl , etc.) se preguntan por qué esta característica no se implementa en otros lugares.
Encontré otra variación de esto:
options || (options = {});
Parece hacer el mismo truco.
Esto es útil para establecer valores predeterminados para los argumentos de la función, por ejemplo:
function test (options) {
options = options || {};
}
Si llama a test
sin argumentos, las options
se inicializarán con un objeto vacío.
El O lógico ||
el operador devolverá su segundo operando si el primero es falso .
Los valores de Falsy son: 0
, null
, undefined
, la cadena vacía ( ""
), NaN
y, por supuesto, false
.
Sí, eso es exactamente lo que hace.
Sí. La muestra es equivalente a esto:
if (options) {
options = options;
} else {
options = {};
}
El operador OR ( ||
) se cortocircuitará y devolverá el primer valor de verdad.