Если вы не против использовать решение jQuery, вы можете попробовать плагин TextFill
jQuery TextFill изменяет размер текста, чтобы он вписывался в контейнер и делал размер шрифта как можно большим.
blockquote>
Первый обнаруженный мной ответ Google:
http://www.tipstrs.com/tip/354/Using-optional-parameters-in -Javascript-functions
Я не встречал случаев, когда вопросительный знак использовался бы для предупреждения вызывающего абонента о необязательном параметре. Хотя это сделано на других языках, я не думаю, что это необходимо в javascript.
Фактически, кажется, что вы не можете использовать вопросительный знак в имени переменной . Только буквы, цифры, $ и _.
В Javascript нет синтаксиса, который указывает, что параметр является необязательным (или обязательным). Все параметры являются необязательными. Если они не указаны, они undefined
, поэтому вам нужно проверить это. Например, эта функция фактически создаст для параметра значение по умолчанию, равное 10:
function myfunc(someParam) {
if (someParam === undefined) {
someParam = 10;
}
...
}
Также вы можете получить программный доступ к параметрам, используя свойство arguments
.
Наконец, если у вас более 3-4 параметров, обычно рекомендуется использовать анонимный объект.
На самом деле, все параметры являются необязательными в функциях JS. Нет предупреждения или ошибки, если вы пропустите параметр.
Вы можете установить значения по умолчанию, такие как
function throw_cat(dist){
dist = typeof dist=='undefined' ? 20 : dist;
//OR
dist = dist || 20; //this will assign it to 20 if you pass 0 or another 'falsy' value, though. May be good if you expect a string. String '0' stays, '' or null assigns the default
//etc...
}
Вы можете использовать аннотации, такие как {Object =} или {number =}, в разделе комментариев при использовании доклета:
/** * @param {object=}xyz */
Современная IDE знает, как распознавать аннотации для JavaScript, и показывает вам указания на потенциальные проблемы в вашем коде.
Пример:
/**
*
* @param query
* @param callback
* @param {number=} ttl optional time-to-leave
*/
loadByJSONP:function loadByJSONP(query, callback, ttl) {
...do some work
}
В этом примере «ttl» является необязательным. аннотация {число =} указывает IDE, что этот параметр является необязательным. Соответственно, когда вы вызываете эту функцию только с двумя параметрами, вы не получите предупреждение.
Аннотации также могут использоваться для обозначения ожидаемого типа. это делает ваш код лучше и менее подвержен ошибкам. Вот ссылка для аннотаций:
https://developers.google.com/closure/compiler/docs/js-for-compiler
Во-первых, все, кто пишет JavaScript, делают себе одолжение и проходят Изучение продвинутого JavaScript из Джона Резига .
function myFunc(arg1, arg2 /* varargs... */) {
var optional = Array.prototype.slice.call( arguments, 2 );
Каждый параметр функции является «необязательным», даже тот, который вы объявляете в списке параметров объявления функции.
Просто рассмотрите документирование их хорошо.
Клетус и Дамовиза сделали хорошие предложения. Я также хотел бы добавить, что некоторые (например, я) могут предпочесть такую запись:
function foo(/*bar*/) {
if (arguments.length == 1) {
var bar = arguments[0];
...
}
}
Это служит для того, чтобы документировать разработчикам вашей кодовой базы, что аргумент является необязательным, и также документирует имя, но также предотвращает отображение аргумента в имени функции в отладчике (пример будет отображаться как foo () , а не foo (необязательный_аргумент) . В противном случае разработчики, использующие API) Можно предположить, что это было необходимо.
Редактировать: Это особенно полезно для необязательных аргументов, которые предназначены для внутреннего использования.
Правильно ли использовать a? пометить как Ruby в объявлении функции
Нет, языкового способа обозначения необязательного аргумента нет. Я определенно думаю, что это стоит указать в комментарии, однако:
function myFunc(var1, var2 /* optional */, var3 /* optional */) {
if (var2===undefined) ...
(Обратите внимание на тройное равенство для точного тестирования на равенство. В противном случае переданное значение null
также будет соответствовать. Обычно вы хотите, чтобы ===
для большинство сравнений в JS, так как двойное равенство нежелательно слабо типизировано.)
Поскольку, когда у вас есть неопределенное количество необязательных аргументов, вы обычно опускаете их в операторе функции, и снова комментарий вежливый:
function myFunc(var1 /* , optional var2..varN */) {
for (var i= 1; i<arguments.length; i++) ...
Некоторые источники советуют вам полностью пропустить параметры и вместо этого использовать массив аргументов. Это позволяет вам принимать любые входные данные, предоставленные вашей функции, и вы можете решить, как реагировать на аргументы, переданные вашей функции, по своему усмотрению.
Подробнее об этом можно прочитать здесь: http://www.devguru.org/technologies/ecmascript/quickref/arguments.html
Просто не определяйте функцию с какими-либо параметрами и обращайтесь к массиву специальных аргументов изнутри функции, в которой должны быть необязательные параметры. Пример ниже.
<HTML>
<HEAD>
<SCRIPT Language="JavaScript">
function foo() {
var argv = foo.arguments;
var argc = argv.length;
for (var i = 0; i < argc; i++) {
alert("Argument " + i + " = " + argv[i]);
}
}
</SCRIPT>
</HEAD>
<BODY onload="foo('hello', 'world');">
</BODY>
</HTML>