Пропуск необязательных параметров функции в JavaScript
не могли бы вы указать мне хороший способ пропустить дополнительные параметры в JavaScript.
например, я хочу выбросить все opt_
параметры здесь:
goog.net.XhrIo.send(url, opt_callback, opt_method, opt_content, {'Cache-Control': 'no-cache'}, opt_timeoutInterval)
3 ответов
устранение:
goog.net.XhrIo.send(url, undefined, undefined, undefined, {'Cache-Control': 'no-cache'})
вы должны использовать undefined
вместо необязательного параметра вы хотите пропустить, потому что это 100% имитирует значение по умолчанию для необязательных параметров в JavaScript.
маленький пример:
myfunc(param);
//is equivalent to
myfunc(param, undefined, undefined, undefined);
сильная рекомендация: используйте JSON, если у вас много параметров, и вы можете иметь дополнительные параметры в середине списка параметров. Посмотрите, как это делается в jQuery.
короткий ответ:
самая безопасная ставка undefined
, и должен работать практически повсеместно. В конечном счете, однако, вы не можете обмануть вызываемую функцию, думая, что вы действительно опустили параметр.
если вы обнаружите, что склоняетесь к использованию null
просто потому, что он короче, подумайте об объявлении переменной с именем _
как хорошая стенография для undefined
:
(function() { // First line of every script file
"use strict";
var _ = undefined; // For shorthand
// ...
aFunction(a, _, c);
// ...
})(); // Last line of every script
подробности
во-первых, знаю что:
-
typeof undefined
оценивает в"undefined"
-
typeof null
оценивает в"object"
предположим, что функция принимает аргумент, который она ожидает иметь тип "number"
. Если вы предоставите null
в качестве значения, вы даете ему "object"
. Семантика отключена.1
по мере того, как разработчики продолжают писать все более надежный код javascript, возрастает вероятность того, что функции, которые вы вызываете явно проверьте значение параметра для undefined
в отличие от классического if (aParam) {...}
. Вы будете на шаткой земле, если продолжите использовать null
взаимозаменяемо с undefined
только потому, что они оба принуждают false
.
имейте в виду, однако, что на самом деле функция может сказать, был ли параметр фактически опущен (по сравнению с установкой undefined
):
f(undefined); // Second param omitted
function f(a, b) {
// Both a and b will evaluate to undefined when used in an expression
console.log(a); // undefined
console.log(b); // undefined
// But...
console.log("0" in arguments); // true
console.log("1" in arguments); // false
}
сноски
- пока
undefined
также не типа"number"
, это вся работа должна быть тип, не тип. Вот почему это значение принимается неинициализированными переменными и возвращаемое значение по умолчанию для функций.
просто передать null
в качестве значения параметра.
Added: вы также можете пропустить все последующие необязательные параметры после последнего, который вы хотите передать реальное значение (в этом случае вы можете пропустить opt_timeoutInterval
параметр на всех)