假设我有:
function myFunk(param1) {
if (param1) {
// do stuff
}
}
我将其更改为...
function myFunk(param1, param2) {
if (param2) {
// do stuff
}
}
param2 只能是真或假。这安全吗?
假设我有:
function myFunk(param1) {
if (param1) {
// do stuff
}
}
我将其更改为...
function myFunk(param1, param2) {
if (param2) {
// do stuff
}
}
param2 只能是真或假。这安全吗?
function myFunk(param1, param2) { if (param2) { // do stuff } }
param2 只能是真或假。
不,它可以有任何价值。如果仅使用一个参数 ( myFunk("something")
) 调用该函数,则该函数param2
的值为undefined
。当然,这是虚假的(如null
、或),因此正如预期的那样,您的 if 语句将不会被执行。""
0
NaN
这安全吗?
这是在 JavaScript 中使用可选参数的标准方式,是的。有关更多详细信息,请参阅Javascript 中的函数重载 - 最佳实践
您不能在 javascript 中重载函数。您最好检查arguments
或检查undefined
以查看调用者正在尝试做什么。例如
function myFunk(param1, param2) {
if (param2) {
// do stuff
}
}
myFunk(1); // if does not execute
myFunk(1, 2); // if executes
但是,如果您为第二个参数传递了一个虚假值,那么 if 仍然不会执行
myFunk(1,0); // if does not execute
在这种情况下,我觉得如果你使用函数变量方法会更清楚。
var myFunk = function(param1) {
if (param1) {
// do stuff
}
}
and I alter this to ...
myFunk = function(param1, param2) {
if (param2) {
// do stuff
}
}
现在很清楚发生了什么,以前版本的函数 myFunc 在任何地方都不存在。
编辑更多信息
如果您function(param1, param2) {}
只使用一个参数调用,typeof param2 == "undefined"
则将返回 true。例如:
myFunk = function(param1, param2) {
if (typeof param2 == "undefined") {
// do stuff with only param1
}
}
在 javascript 中函数重载是不可能的,如果你在同一个范围内创建了两个同名的函数,无论参数的数量如何,总是会调用具有该名称的最后一个函数。