布尔||优化 - "不正确"应用于false和undefined时的值

时间:2014-03-27 20:55:22

标签: javascript syntax boolean

我只是想优化一些代码(从初学者的角度来看)。

我有一个传递给函数的选项,我想确定是否在options对象中定义了一个变量并将其设置为...或默认情况下将其设置为true。

我可以使用jquery来$.extend一个默认的选项对象,但是选项对象也被我只发送某些对象属性的其他东西使用。

如何优化甚至更短(禁止空白区域):

var show = typeof options.show == 'boolean' ? options.show : true;

此代码肯定很短,但我只是在寻找可能更紧凑的任何内容。

所以,使用类似的东西:

var show = options.show || true;

没有给我正确的价值。

实施例

// Pass in options like { show : false }
var show = options.show || true;
// show will be set to true because options.show === false
// therefore evaluating to the other side of the "||"

使用类似的东西:

var show = !!options.show;
// show will be set to false if options.show is undefined but we want true instead

抽象似乎是这里唯一的行动方式。

谢谢!

2 个答案:

答案 0 :(得分:1)

简洁的方式是

var show = options.show != false

由于undefined不等于false,因此将show设置为true,除非它设置为false。

我处理这种情况的首选方法实际上是将密钥从“show”更改为“hide”。然后你可以放心地做到

var hide = options.hide

因为当用作条件时,undefined的行为与false相同。

答案 1 :(得分:0)

你仍然可以使用$.extend,但稍微扭曲一下:

var defaults = {show: true};
var optionsByUser = {};
var defaultsAndUsersOptionsCombined = $.extend({}, defaults, optionsByUser);

如您所见,我添加了{}作为$.extend的第一个参数。这将确保将数据复制到新对象,而不是修改defaultsoptionsByUser