我有一个关于在函数内设置变量默认值的问题。我知道有几个帖子关于如何这样做但是我对这种替代方法感兴趣,是否有人可以向我解释使用的专业人士/使用方法特别是当JSBIN编译器标记错误时......
第2行:void 0 === data&& (数据= 20); ---期望一个赋值或函数调用,而是看到一个表达式。
新/替代方法
var a = function(data) {
void 0 === data && ( data = 20 );
return data;
};
使用 typeof 运算符的当前方法
var b = function(data) {
data = typeof data === "undefined" ? data = 30 : data;
return data;
};
答案 0 :(得分:1)
我从未见过这样写过,我怀疑它会起飞。开发人员曾经使用void 0
代替undefined
,因为undefined曾经是窗口对象的可写属性。对于较新的浏览器,现在已经很久没有这种情况了。你现在这样写的唯一原因就是抚摸自己的自我,并且感觉自己优于那些可能不知道无效0背后意义的人。
答案 1 :(得分:0)
由于void 0
未定义。比这个:
void 0 === data && ( data = 20 );
编写此代码是一种非常愚蠢的方式:
if (data === undefined)
data = 20
执行第一次比较 void 0 === data ,如果是,则执行条件的右侧,为数据分配20。
当数据未定义时,下面的代码基本上将数据变量赋值为30。虽然这段代码很傻,但原因是你不需要在真正的分支中设置data = 30,你可以只返回30 ...这段代码有效,因为当你指定一个vuraible vlue的结果赋值是值本身,所以这就是这里发生的,操作数据= 30返回30,但你可以写 data = typeof data ===“undefined”? 30:数据;
var b = function(data) {
data = typeof data === "undefined" ? data = 30 : data;
return data;
};
我认为最好的方法如下:
var b = function (data) {
data = data || 30;
}
答案 2 :(得分:0)
所有方法都有各种优点和缺点 -
以下是我喜欢的方法:
function hasOptionalParams(p1, p2 p3) {
if (arguments.length === 0) {
p1 = "default";
}
if (arguments.length === 1) {
p2 = "default";
}
if (arguments.length === 2) {
p3 = "default";
}
}
编辑:更多详情
我喜欢这种方法有很多原因。
null
,undefined
或0
p2
,我可以将p3
和p1
设置为不同。