Как работает математика.максимум.применить () работу?
как 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омма, разделенных
подробнее о вызове и применении