Я просто копал код JavaScript (Raphaël.js) и наткнулся на следующую строку (немного перевел):
Math.min.apply(0, x)
где x - массив. Почему бы вам это сделать? Поведение, похоже, "берет min из массива x".
Я просто копал код JavaScript (Raphaël.js) и наткнулся на следующую строку (немного перевел):
Math.min.apply(0, x)
где x - массив. Почему бы вам это сделать? Поведение, похоже, "берет min из массива x".
Я понял ответ, когда я отправлял свой собственный вопрос: это самый краткий способ переноса min массива x в JavaScript. Первый аргумент полностью произволен; Я считаю, что 0 запутывает, потому что код интуитивно означает "Возьмите минимум 0 и x", что абсолютно не так. Использование объекта Math имеет больше смысла для удобочитаемости человека, но авторы Raphael.js одержимы минимизацией, а 0 - на три байта короче.
См. http://ejohn.org/blog/fast-javascript-maxmin/
Для удобства чтения я настоятельно призываю людей прекратить это делать и вместо этого определить функцию по строкам
function arrayMin(arr) { return Math.min.apply(Math, arr); };
Причина такова:
Ваш вход x - это массив
Подпись Math.min() не принимает массивы, только разделенные запятой аргументы
Если вы использовали Function.prototype.call(), он имел бы почти такую же подпись, за исключением того, что первым аргументом является контекст this, то есть кто "вызывает"
Math.min.call(context, num1, num2, num3) context имеет значение только при обращении к this внутри функции, например. большинство методов вы можете вызвать в массиве: Array.prototype.<method> будет ссылаться на this (массив слева от "точки" ) внутри метода.
Function.prototype.apply() очень похож на .call(), только вместо того, чтобы принимать разделенные запятыми аргументы, теперь он принимает массив после context.
Function.prototype.call(context, arg1, arg2, arg3)Function.prototype.apply(context, [arg1, arg2, arg3]) 0 или null, который вы вставляете в качестве первого аргумента, - это просто переключение места.
Правильный и менее запутанный способ назвать это: Math.min.apply(null, array)
Если параметр не используется, он устанавливает значение null, что делает код более читаемым, чем установка его в 0 или Math
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
Вот пример, где мы можем получить смещения временной шкалы MAX и MIN для данного года для часового пояса. Он возвращает два изменения за год для учета DST и ST. (то есть ST = 300 и DST = 360 для рассматриваемого часового пояса).
var arr = [];
for (var i = 0; i < 365; i++) {
var d = new Date();
d.setDate(i);
var newoffset = d.getTimezoneOffset();
arr.push(newoffset);
}
var DST = Math.min.apply(null, arr);
var nonDST = Math.max.apply(null, arr);
tw.local.stInt = DST
tw.local.edInt = nonDST