在 JavaScript 中,我经常使用 ||
运算符来获取某些属性的值 - 或者默认值。例如:
var dens = mapping.defaultElementNamespaceURI||mapping.dens||'';
如果mapping
有defaultElementNamespaceURI
,将被使用,否则寻找dens
或默认使用空字符串。
但是,如果我的属性是 bool 值,它就不起作用:
var dom = mapping.allowDom || mapping.dom || true;
即使 mapping.dom
为 false
,也返回 true
。
我想知道,默认 bool 属性的最佳(简洁但仍可读)语法是什么?在某种意义上默认,如果定义了属性,则使用它的值,否则使用一些提供的默认值。当然,我可以为此编写一个函数,但也许有一些像 a || 这样优雅的东西b || c
?
代码示例:
var a = {};
$('#result').text(a.boo||a.b||true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="result"></pre>
更新
似乎没有“语法上甜美”的方法来做到这一点,所以我求助于编写一个函数:
var defaultValue = function()
{
var args = arguments;
if (args.length === 0)
{
return undefined;
}
else
{
var defaultValue = args[args.length - 1];
var typeOfDefaultValue = typeof defaultValue;
for (var index = 0; index < args.length - 1; index++)
{
var candidateValue = args[index];
if (typeof candidateValue === typeOfDefaultValue)
{
return candidateValue;
}
}
return defaultValue;
}
}
将最后一个参数视为默认值。返回与默认值具有相同类型的第一个参数。
最佳答案
你会发现最接近优雅的是:
var dom = mapping.allowDom ?映射.allowDom : 映射.dom ?映射.dom : true;
如前所述,这只是一个存在检查。您可以执行以下任一操作来接受 false
值:
var dom = mapping.allowDom != null ? mapping.allowDom : mapping.dom != null ?映射.dom : true;
var dom = 'allowDom' 在映射中? mapping.allowDom:映射中的“dom”?映射.dom : true;
完整性更新:如果您有要比较的变量值列表,则更新中的函数是理想的。但是,如果我们唯一比较的是提到的 2 个(并且我们控制着设置/验证 mapping.thing
),我的代码将如下所示。 (我也不知道你以后是如何使用 dom
的。)
var dom = mapping.allowDom || mapping.dom;
dom = dom === undefined ? true : dom;
如果超过 2 个元素,我可能会选择您的方法。
关于javascript - 如何在 JavaScript 中将 bool 属性设置为 "default"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29423170/