PHP函数的自定义参数是如何在jquery中实现的


how the custom argument of PHP function is implemented in jquery

我们用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目前不支持此功能。尽管你可以使用下一种方法:

  1. 检查参数是否通过:

    function myFunc(name, gender) {
        name = name || 'unnamed';
        gender = gender || 'male';
    }
    
  2. 使用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