objects - mostrar numero mayor javascript
¿Cómo funciona Math.max.apply()? (4)
¿Cómo funciona el Math.max.apply() ?
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<script>
var list = ["12","23","100","34","56",
"9","233"];
console.log(Math.max.apply(Math,list));
</script>
</body>
</html>
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
El código anterior encuentra el número máximo en la lista. ¿Alguien puede decirme cómo funciona el código siguiente? Parece que funciona si paso null or Math.
console.log(Math.max.apply(Math,list));
¿Todas las user-defined/Native functions el user-defined/Native functions tienen un método de llamada y aplicación que podemos usar?
¿Alguien puede decirme cómo funciona el siguiente código?
Math.max.apply(Math,list)
Math.max una función Math.max con el objeto Math para usar como referencia en la implementación de la función (cuerpo) y la list para pasar como argumentos.
Así que esto finalmente equivale a
Math.max("12","23","100","34","56", "9","233")
Parece que funciona si paso nulo o matemático.
Obviamente, la implementación Math.max no usa variables de instancia, no hay ninguna razón para hacerlo. La implementación ingenua simplemente iteraría sobre los arguments y encontraría el máximo.
¿Todas las funciones nativas / definidas por el usuario tienen un método de llamada y aplicación que podemos usar?
Sí, cada función individual puede invocarse mediante call o apply
Referencias
-
.apply()MDN.apply()(créditos a @RGraham )
Math.max (val1, val2, ...)
Math.max(1, 2, 3); // Math.max([value1[, value2[, ...]]])
value1, value2... son parámetros y deben ser números https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
No puede pasar array como parámetros Math.max . Para pasar una matriz, debes usar apply .
Aplicar
El primer parámetro de apply es this , el segundo es array . Los métodos matemáticos son equivalentes a estáticos en otros idiomas, lo que significa que no necesita una instancia de objeto a diferencia de array.prototype.slice por lo que no es necesario que pase this en este caso.
Ejemplo
var arr = [1, 2, 3];
Math.max(1, 2, 3); // -> 3
Math.max(arr); // -> NaN (Not a Number)
Math.max.apply(null, arr); // Math.max.apply(null, [1, 2, 3]) -> Math.max(1, 2, 3) -> 3
arr.slice(1); // -> returns Array [2, 3]
Array.prototype.slice.call(arr, 1); // Array.prototype.slice.call([1, 2, 3], 1) == [1, 2, 3].slice(1)
Cuando quiera pasar una matriz como parámetro, debe usar apply ; de lo contrario, use call .
un pply = un rray
c todo = c omma separado
Más sobre llamar y solicitar
En JavaScript ES6 simplemente use el operador Spread :
var list = ["12","23","100","34","56","9","233"];
console.log(Math.max(...list));
// ^^^ Spread operator
apply acepta una matriz y aplica la matriz como parámetros a la función real. Asi que,
Math.max.apply(Math, list);
se puede entender como,
Math.max("12", "23", "100", "34", "56", "9", "233");
Entonces, apply es una forma conveniente de pasar una matriz de datos como parámetros a una función. Recuerda
console.log(Math.max(list)); # NaN
no funcionará, porque max no acepta una matriz como entrada.
Hay otra ventaja, al usar apply , puedes elegir tu propio contexto. El primer parámetro, que pase para apply cualquier función, será el que this dentro de esa función. Pero, max no depende del contexto actual. Entonces, cualquier cosa funcionaría en lugar de Math .
console.log(Math.max.apply(undefined, list)); # 233
console.log(Math.max.apply(null, list)); # 233
console.log(Math.max.apply(Math, list)); # 233
Como apply se define realmente en Function.prototype , cualquier objeto de función de JavaScript válido tendrá función de apply , de forma predeterminada.