Как работает математика.максимум.применить () работу?
как 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
приведенный выше код находит максимальное число в списке. Может ли кто-нибудь сказать мне, как работает приведенный ниже код?. Кажется, это работает, если я прохожу null or Math.
console.log(Math.max.apply(Math,list));
не все user-defined/Native functions
есть вызов и применить способ, который мы можем использовать?.
4 ответа:
apply
принимает массив и применяет его в качестве параметров к фактической функции. Итак,Math.max.apply(Math, list);
можно понимать так:
Math.max("12", "23", "100", "34", "56", "9", "233");
и
apply
- это удобный способ передачи массива данных в качестве параметров функции. Помнитеconsole.log(Math.max(list)); # NaN
не получится, потому что
max
не принимает массив в качестве входных данных.есть еще одно преимущество, с помощью
apply
, вы можете выбрать свой собственный контекст. Первый параметр, вы перейти кapply
любой функции, будетthis
внутри этой функции. Но,max
не зависит от текущего контекста. Так что, все будет работать на месте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
С
apply
фактически определена вFunction.prototype
, любой допустимый объект функции JavaScript, будет иметьapply
функция, по умолчанию.
на JavaScript ES6 просто используйте распространение оператор:
var list = ["12","23","100","34","56","9","233"]; console.log(Math.max(...list)); // ^^^ Spread operator
может ли кто-нибудь сказать мне, как работает приведенный ниже код?
Math.max.apply(Math,list)
вызывает a
математика.Макс(val1, val2,...)
Math.max(1, 2, 3); // Math.max([value1[, value2[, ...]]])
value1, value2...
параметры и должны быть цифры MDN Math.Максвы не можете пройти
array
какMath.max
параметры. Чтобы передать массив, вы должны использоватьapply
.применить
первый параметр apply -
this
, второй -array
. Математические методы эквивалентны статическим на других языках, что означает, что ему не нужен экземпляр объекта в отличие отarray.prototype.slice
так вам не нужно проходитьthis
в этом случае.пример
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)
когда вы хотите передать массив в качестве параметра вы должны использовать
apply
, в противном случае используйтеcall
.apply = array
cвсе = cомма, разделенных
подробнее о вызове и применении