我只是想优化一些代码(从初学者的角度来看)。
我有一个传递给函数的选项,我想确定是否在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
抽象似乎是这里唯一的行动方式。
谢谢!
答案 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
的第一个参数。这将确保将数据复制到新对象,而不是修改defaults
或optionsByUser
。