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

Javascript 如何在jquery中实现PHP函数的自定义参数,javascript,php,jquery,Javascript,Php,Jquery,我们用PHP编写自定义函数的参数,如下所示: function something ($arg = "") { // then do something } 在jquery中应该如何做到这一点 这似乎不起作用: function jq_something ($arg = "") { } 在功能内检查: function jq_something($arg) { if ($arg === undefined) $arg = ""; // your default value }

我们用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会在调用函数时丢失参数的情况下抛出错误–1分钟前的Mostafa Talebi

您一直在混淆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);
    

  • 你的意思是这是jquery中的一个缺陷吗?这样做根本不是JavaScript语言语法的一部分,不管它是jquery之类的大型帮助程序库,MooTools或Prototype——这与其他语言特性(如类型暗示等)相同。我认为jquery在函数被调用时,如果缺少参数,就会抛出错误called@MostafaTalebi一点也不,Javascript对参数非常宽容。如果($arg===undefined)$arg=“”,您可以传递比函数期望的更多或更少的参数,而不会出现任何错误。@DoorKnold是否有理由使用检查
    if($arg===undefined)$arg=“”
    而不是
    $arg=$arg | |“default val”
    ?@DennisMartinez如果您想允许一些错误的值,例如
    '
    0
    null
    ?@DennisMartinez第一个值仅在$arg未定义时才用默认值替换$arg。第二个用于任何错误值,包括
    0
    null
    '
    (空字符串)等
    foo(未定义)
    应该返回
    未定义的
    。这就是为什么在这里检查
    typeOf x
    看起来更准确的原因。但可以肯定的是,这取决于OP到底在寻找什么+1@A.Wolff
    typeof未定义;//“undefined”
    ,人们使用
    typeof
    的真正原因是
    undefined
    在全局名称空间中过去不是不可变的,但现在已经有一段时间了。我的糟糕!你当然是正确的。检查arguments.length可能是“非”问题的解决方案。。。