我希望JavaScript函数具有可选参数,我将其设置为默认值,如果未定义该值,则使用该参数.在Ruby中你可以这样做:
def read_file(file, delete_after = false)
# code
end
Run Code Online (Sandbox Code Playgroud)
这是否适用于JavaScript?
function read_file(file, delete_after = false) {
// Code
}
Run Code Online (Sandbox Code Playgroud) 有没有办法动态获取函数的函数参数名称?
假设我的函数看起来像这样:
function doSomething(param1, param2, .... paramN){
// fill an array with the parameter name and value
// some other code
}
Run Code Online (Sandbox Code Playgroud)
现在,我如何从函数内部获取参数名称及其值的列表到数组中?
对于这个功能
def eat_dog(name, should_digest=True):
print "ate dog named %s. Digested, too? %" % (name, str(should_digest))
Run Code Online (Sandbox Code Playgroud)
我希望,在函数外部,读取它的参数和附加的任何默认值.所以对于这个具体的例子,我想知道它name没有默认值(即它是必需的参数),这True是默认值should_digest.
我知道inspect.getargspec(),它确实给了我关于参数和默认值的信息,但我发现两者之间没有联系:
ArgSpec(args=['name', 'should_digest'], varargs=None, keywords=None, defaults=(True,))
从这个输出我怎么能告诉True(在defaults元组中)是默认值should_digest?
另外,我知道接近问题的"请求宽恕"模型,但不幸的是,该错误的输出不会告诉我缺少参数的名称:
>>> eat_dog()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: eat_dog() takes at least 1 argument (0 given)
Run Code Online (Sandbox Code Playgroud)
为了给出上下文(为什么我要这样做),我通过JSON API在模块中公开函数.如果调用者省略了某些函数参数,我想返回一个特定的错误,该错误命名了省略的特定函数参数.如果客户端省略了参数,但函数签名中提供了默认值,我想使用该默认值.
所以...ES6¹(几个小时前恰好标准化)为类似于PHP,Python等的函数带来了默认参数.我可以这样做:
function foo (bar = 'dum') {
return bar;
}
foo(1); // 1
foo(); // 'dum'
foo(undefined); // 'dum'
Run Code Online (Sandbox Code Playgroud)
MDN表示在调用时评估参数的默认值.这意味着每次调用该函数时,'dum'都会再次计算表达式(除非实现执行一些我们不关心的奇怪的优化).
我的问题是,如何this发挥作用?
let x = {
foo (bar = this.foo) {
return bar;
}
}
let y = {
z: x.foo
}
x.foo() === y.z(); // what?
Run Code Online (Sandbox Code Playgroud)
babel转换器目前评估它为false,但我不明白.如果他们真的在通话时评估,那么:
let x = 'x from global';
function bar (thing = x) {
return thing;
}
function foo () {
let x = 'x from foo'; …Run Code Online (Sandbox Code Playgroud) 我正在研究javascript(node.js)中的一个项目,我试图从函数中获取一个参数名称数组(NOT值,我不需要参数).我目前正在使用Function.toString()获取函数字符串,然后运行正则表达式以获取我的参数列表.
我们来看下面的简单示例:
var myFunction = function (paramOne, paramTwo) { ... }
Run Code Online (Sandbox Code Playgroud)
运行我的正则表达式,然后做一些字符串魔术(拆分等),我希望像这样的数组:
paramList = ['paramOne', 'paramTwo']
Run Code Online (Sandbox Code Playgroud)
我有一些有用的东西,但我觉得它可能不是最好的解决方案给定一些时髦的字符javascript允许你使用变量名称和javascript将让你在多行定义功能.
这是我目前拥有的:
function.*[\w\s$]*(\((.*[\w\s,$]*)\))
Run Code Online (Sandbox Code Playgroud)
这给了我第1组中的"匹配",然后是第2组中没有任何parens的参数列表,这很酷.这真的是做我想要的最好的方式吗?我可以使用更好的正则表达式吗?我并不是在寻找"更简单"的东西,而是真正能够捕捉到所有可能情况的东西.
任何帮助将不胜感激,并提前多多感谢!