javascript - 如何在 JavaScript 中将 bool 属性设置为 "default"?

标签 javascript

在 JavaScript 中,我经常使用 || 运算符来获取某些属性的值 - 或者默认值。例如:

var dens = mapping.defaultElementNamespaceURI||mapping.dens||'';

如果mappingdefaultElementNamespaceURI,将被使用,否则寻找dens或默认使用空字符串。

但是,如果我的属性是 bool 值,它就不起作用:

var dom = mapping.allowDom || mapping.dom || true;

即使 mapping.domfalse,也返回 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/

相关文章:

c# - 获取chrome的控制台日志

javascript - Python 有没有类似 readability.js 的东西?

javascript - 类型错误 : number is not a function - Phonegap Sqlite

javascript - 对象没有方法 Javascript

javascript - 按需提供非缩小的 CSS/javascript

javascript - 根据具有不同 ID 的多个选中复选框的数量启用/禁用按钮

javascript - 在哪里可以找到免费的内容托管服务?

javascript - Angular 异步调用没有按预期结束 while 循环

gmail - 使用 Google 脚本检查消息是否有标签

javascript - React 样式可重用组件不是样式组件