我们用PHP编写一个自定义函数的参数,如下所示:
function something ($arg = "")
{
// then do something
}
在jquery中应该如何做到这一点?
这似乎不起作用:
function jq_something ($arg = "")
{
}
在函数内检查:
function jq_something($arg) {
if ($arg === undefined) $arg = ""; // your default value
}
JavaScript中没有默认值语法。(顺便说一句,这与jQuery完全无关。)
我认为jquery在调用函数时丢失arg的情况下会抛出错误——Mostafa Talebi 1分钟前
您一直混淆jQuery和JavaScript。jQuery只是一个库!jQuery没有定义特殊的语法;它不是一种单独的编程语言。无论如何,不,在JavaScript中,你可以传递或多或少的参数,这很好:
function test(a) {
console.log(a);
}
test("test"); // logs "test"
test(); // logs undefined
test(1, 2, 3); // logs 1
当然,如果您愿意,当参数数量错误时,可以抛出错误:
function threeArgs(a, b, c) {
if (arguments.length !== threeArgs.length) throw new Error("Incorrect number of arguments");
// ...
}
这不是jQuery的限制,但完全没有在JavaScript中实现(也许ES6除外)。
当前的做法是检查未定义的或一些意外的错误值,然后修改为默认值。
function foo(x) {
if (undefined === x) x = 0;
return x;
}
foo('a'); // "a"
foo(1); // 1
foo(); // 0
foo(null); // null
foo(undefined); // 0
试试这样的
function jq_something (arg) {
arg = typeof arg !== 'undefined' ? arg : 'default_value';
}
我认为,以下方法(如我的示例代码所示)可以帮助您:
function say_smth(options) {
var defaults = {"message":"hi", "user" : "Anonymous"};
if(undefined===options)
options = {}
for (key in defaults)
if(undefined===options[key]) options[key]=defaults[key];
alert (options['message'] + ', ' + options['user']);
}
say_smth(); //hi, Anonymous
say_smth({"user":"Peter"}); //hi, Peter
say_smth({"message":"nice hat"}); //nice hat, Anonymous
say_smth({"message":"go fish", "user":"Jack"});//go fish, Jack
JavaScript目前不支持此功能。尽管你可以使用下一种方法:
-
检查参数是否通过:
function myFunc(name, gender) { name = name || 'unnamed'; gender = gender || 'male'; }
-
使用
options
对象参数(用于更复杂的代码),并为未传递的选项预设默认值。var Person, mary; Person = function(name, options) { this.name = name; this.setOptions(options || {}); }; Person.defaultOptions = { age: 30, gender: 'male' }; Person.prototype.setOptions = function(options) { this.options = $.extend({}, Person.defaultOptions, options); }; mary = new Person('Mary', {gender: 'female'}); console.log(mary);
Fiddle