javascript-如何将值“ undefined”传递给具有多个参数的函数?
我想在多参数函数上传递'undefined'的值,但不忽略该参数。
我的意思是“不省略参数”。 我的意思是我们不应该像这样的例子那样忽略undefined
:
function myFunction (parm1, parm2) {}
myFunction("abc");
这确实会使undefined
变得不确定,但是我不允许这样做,因为在省略参数之后我需要指定其他参数,因此在我想使null
不确定但又想要的情况下,前一种方法将不起作用 在此之后还有其他参数来保存值。
我尝试用以下方法解决问题:
myFunction( ,"abc"); //doesn't seem to work
更新:
和undefined
«现在可以可靠地使用。
但是,值得一提的是:
将变量设置为
undefined
被认为是错误的做法,我们 应该改用null
。
myFunction(undefined,"abc");
这种方式应该可以,什么问题?
看这里
这是来自mozilla的未定义文档,所有浏览器均支持
undefined
运算符似乎是显式获取undefined
的最常用方法。
您可以在示例中使用它:
myFunction(void 0, "abc");
这也是一种与undefined
进行比较的可靠方法,可以防止在旧的JavaScript环境中意外覆盖undefined
:
var x;
if (x === void 0) {
// this will execute
}
更好的方法可能是传递带有命名属性的Object
,然后寻找那些特定的属性值。 这样,您不必依赖参数的数量。
示例:Object.dummy
我只是有一个主意,而且似乎可行:
var undf;
myFunction(undf, "abc");
我确定有更好的方法,但是我发布了这个
我认为您最接近的方法是将null
作为参数传递。 它不是undefined
,但在大多数情况下,它已经足够接近了。
如果计划添加不确定数量的参数,请尝试使用此方法:
function myFunc(params) {
// Define default values
var name = 'John';
var age = '40';
// You can loop through them
for (var p in params) {
alert(p + ':' + params[p]);
}
// And read them in like this
if (typeof params.name != 'undefined') {
name = params.name;
}
if (typeof params.age != 'undefined') {
age = params.age;
}
alert(name + ' ' + age);
}
alert('test1');
myFunc({name:'Bob', age:'30'});
alert('test2');
myFunc({name:'Bob'});
您可以使用apply和参数数组来传递“未定义”作为参数之一。 例如,您想将parm1传递为“ undefined”:
function myFunction (parm1, parm2) {
if(typeof (parm1) === "undefined"){
alert("parm1 is undefined")
}
if(typeof (parm2) === "undefined"){
alert("parm2 is undefined")
}
}
var myParameters = [undefined, "abc"];
myFunction.apply(valueForThis, myParameters );
您需要通过以下方式之一在函数代码本身中使用未定义的变量来处理函数调用:
function myFunction (parm1, parm2) {
if (parm1 !== undefined) {
// execute code if 1st param is undefined
}
if (parm2 !== undefined) {
// execute code if 2 param is undefined
}
// execute other part of code
}
现在,您可以通过以下方式调用上述函数:
myFunction(undefined,"abc"); // with 1st param value not known
myFunction("cde",undefined); // with 2nd param value not known
myFunction("cde","abc"); // with both param value known
void 0
应该绝对可以工作,除非残酷地重新定义了undefined
! 为了安全起见,有很多方法可以获取未定义的值,这些方法可以避免以下假设:所谓的“未定义”确实具有特殊的未定义值:
void 0
var undef; undef
[][0]
{}.foo
// `undef` is guaranteed to have the undefined value within this closure
(function(undef){ undef }())
// this expression evaluates as undefined
(function(){}())
void 0
是使用最广泛的(只要需要未定义的值,编译的CoffeeScript便会包含此代码)。
如果可能,是否可以将函数重新排列为myFunction(parm2,parm1)
即。 尝试确保可能未定义的参数位于函数的最后,如果引入更多参数,则可能无法使用。
当可接受时,一种简单的方法是传递未定义的。 但更好的是,每个W3C如下
缺少JavaScript的参数
function myFunction(x, y) {
if (y === undefined) {
y = 0;
}
}
仅举例说明@dbrin的解释,@ alphapilgrim可能希望检查一下。
simpleFunction({params1:12, params2:"abc"}); //use expected arguments
simpleFunction({params2:"abc"}); //use only one
simpleFunction({params2:"abc", params1:12, iDoNotExist:"I will not be included"}); //use expected arguments in any order
simpleFunction(); //ignore arguments and uses defaults
simpleFunction(2123); //ignores non object arguments
function simpleFunction(someParams){
var myParams = {
params1:null,
params2:"cde" //default value for second parameter
};
simpleExtend(myParams, someParams);
console.log(myParams);
}
//to include in your utilities
function simpleExtend(currentParams, newParams){
if(typeof currentParams !== "undefined" && typeof newParams !== "undefined"){
Object.keys(newParams).forEach(function(key){
if(typeof currentParams[key] !== "undefined"){
currentParams[key] = newParams[key];
}
});
}
}