在JavaScript中,我經常使用||
運算符來獲取某個屬性的值 - 或者默認值。例如:如何在JavaScript中「默認」布爾屬性?
var dens = mapping.defaultElementNamespaceURI||mapping.dens||'';
如果mapping
有defaultElementNamespaceURI
,將使用它,否則找dens
或默認使用一個空字符串。
但是,如果我的財產是布爾值,它不工作:
var dom = mapping.allowDom || mapping.dom || true;
返回true
即使mapping.dom
是false
。
我想知道,什麼是最好的(簡潔但仍然可讀)的默認布爾屬性的語法?默認情況下,如果該屬性已定義,則使用其值,否則某些值會提供默認值。我可以爲此寫一個函數,但是也許有些像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;
}
}
將最後一個參數視爲默認值。返回與默認值類型相同的第一個參數。
你必須明確地測試值。如果你正在處理config * objects *,你也可以編寫一個簡單的合併函數,只有在屬性不存在時纔會複製該屬性。 – 2015-04-02 21:59:40
你基本上都是堅持'typeof'測試或'==='測試(以一種可行的方式,而不是我刪除的答案:) – Pointy 2015-04-02 22:00:01
是的!誤解,並刪除我的評論:] – Patrick 2015-04-02 22:01:39