用于设置默认函数变量值的JavaScript方法

时间:2014-05-08 13:24:35

标签: javascript function variables void typeof

我有一个关于在函数内设置变量默认值的问题。我知道有几个帖子关于如何这样做但是我对这种替代方法感兴趣,是否有人可以向我解释使用的专业人士/使用方法特别是当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;   
};

3 个答案:

答案 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";
  }


}

编辑:更多详情

我喜欢这种方法有很多原因。

  • 对于刚接触JavaScript的人来说,这是绝对的清晰。我在一个团队工作,我永远不知道接下来的代码是谁以及他们的技能水平。
  • 这确实捕获了未传入的参数,而不是故意传递nullundefined0
  • 的人
  • 我可以设置多个行为。如果仅传递p2,我可以将p3p1设置为不同。