2010-09-07 55 views
3

在PHP中,我们可以指定变量的默认值在像功能:功能和不必需的变量

function myFunction(myDefaultVariable, myOtherVariable, myCheckVariable = "basic"){ 
    // so yeah, myDefaultVariable is required always, 
    // same applies for myOtherVariable, 
    // and myCheckVariable can be skipped in function call, because it has a default value already specified. 
} 

有没有类似这样的东西在JavaScript?

回答

8

你不需要在Javascript中传递所有变量。

虽然少哈克的方式是使用对象:

function foo(args) { 
    var text = args.text || 'Bar'; 

    alert(text); 
} 

要叫它:

foo({ text: 'Hello' }); // will alert "Hello" 
foo(); // will alert "Bar" as it was assigned if args.text was null 
+0

你基本上是传递一个参数:与对应于“参数的属性的对象,做我的理解对不对 – Piskvor 2010-09-07 07:30:00

+0

啊,谢谢正是我一直在寻找 – jolt 2010-09-07 07:30:18

+0

@Piskvor - 是正确的吗?!。它的一个参数包含了你可以访问的属性,其中任何一个都可以为null,所以它的重要性在于检查而不是假定它们已经被指定。通常,对于'mandatory'参数,我检查它们是否在顶部提供该方法抛出一个异常,如果不是这样的话。'if(!('参数'在args中))抛出('参数是一个必需的参数');' – 2010-09-07 07:34:07

4

不完全是,但你可以通过检查这个值是通过模拟它和设置默认,例如

optionalArg = (typeof optionalArg == "undefined")?'defaultValue':optionalArg 

注意像这样的技术的原理,即使optionalArg供应,但计算结果为假的 - 这就像optionalArg=optionalArg || 'default'一个简单的成语失败上。

同样在每个函数中,您都可以访问一个名为arguments的数组,该数组将包含传递给该函数的所有参数,您可以使用它来使用具有可变长度参数列表的函数。

1

没有我知道的:

但是有两种方法可以解决这个问题。

//1. function.arguments - this is advisable if you don't know the 
// maximum number of passed arguments. 

function foo() { 
    var argv = foo.arguments; 
    var argc = argv.length; 
    for (var i = 0; i < argc; i++) { 
    alert("Argument " + i + " = " + argv[i]); 
    } 
} 

foo('hello', 'world'); 

//2. "Or" operator - this is good for functions where you know the 
// details of the optional variable(s). 

function foo (word1, word2) { 
    word2 = word2 || 'world'; 
    alert (word1 + ' ' + word2); 
} 

foo ('hello'); // Alerts "hello world"