我想知道是否有可能通过指定参数名称来传递值,而不考虑此参数是第一个、第二个还是第100个。
例如,在Python中,您可以轻松地这样做:
def myFunction(x, y):
pass
myFunction(y=3);
我需要将一个值传递给一个特定的参数,但我并不一定知道它在参数枚举中的位置。我已经搜索了一段时间,但似乎没有什么方法可行。
我想知道是否有可能通过指定参数名称来传递值,而不考虑此参数是第一个、第二个还是第100个。
例如,在Python中,您可以轻松地这样做:
def myFunction(x, y):
pass
myFunction(y=3);
我需要将一个值传递给一个特定的参数,但我并不一定知道它在参数枚举中的位置。我已经搜索了一段时间,但似乎没有什么方法可行。
不,JavaScript 中不存在命名参数。
有一种(某种程度上的)解决方法,通常较为复杂的方法可以将一个对象作为参数代替个别参数。
function doSomething(obj){
console.log(obj.x);
console.log(obj.y);
}
可以称之为
doSomething({y:123})
哪一个会先记录undefined
(变量 x
)然后是123
(变量 y
)。
你还可以将某些参数设为可选,并提供默认值:
function doSomething(obj){
var localX = obj.x || "Hello World";
var localY = obj.y || 999;
console.log(localX);
console.log(localY);
}
在JavaScript中,无法以这种方式传递参数。如果您需要这样做,最好将一个对象传递到您的函数中,并设置属性来表示要传递的参数:
function myFunction(p) {
console.log(p.x);
console.log(p.y);
}
myFunction({y:3});
function myFunction(parameters) {
...
var x = parameters.myParameter;
}
myFunction({myParameter: 123});
function someFun(params) {
var x = prams.x;
...
}
函数调用将会像这样
someFun({x: 5});
var myFunction = function(data){
console.log(data.foo); //hello;
console.log(data.bar); //world;
}
myFunction({foo: 'hello', bar: 'world'});
否则,您的参数将按顺序而非名称接收。
var myFunction = function(foo, bar){
console.log(foo); //bar;
console.log(bar); //foo;
//hyper confusing
}
var foo = 'foo',
bar = 'bar';
//Passing the parametes out of order
myFunction(bar, foo);
function myFunction(x, y) { return x + y }
function invokeByParams(func, params) {
var text = func.toString()
var i1 = text.indexOf('(') + 1
var i2 = text.indexOf(')')
var args = text.substring(i1, i2).split(',')
args = args.map(function(x) { return x.trim() })
args = args.map(function(x) { return params[x.trim()] })
return func.apply(this, args)
}
invokeByParams(myFunction, { y: 1, x: 2 }) // => 6
typeof Number("NaN")
(...其结果非常合理)。但是我发现float('nan')
是缺失的NaN
常量的最佳Python近似值。无论如何,我不是试图结束今天的工作吗? - Bergi