1

考虑以下示例:

if (cache) {
    x = cache;
} else {
    x = cache = someMethod();
}

无论如何要使它比cache ? x = cache : x = cache = someMethod();?

编辑:

感谢所有提出的解决方案,我应该注意到有问题的数据是字符串而不是布尔值。

4

3 回答 3

7
x = cache || (cache = someMethod());
于 2012-09-01T09:20:45.520 回答
1

如果不确定cache之前已声明和/或分配,这是对MaxArt答案的修改(使用短路布尔评估逗号运算符):

x = (cache = window.cache || someMethod(),cache);
//note: 'window' may be another namespace

在严格模式下也行不通。在这种情况下,这将:

'use strict';
var x = function(w){w.cache = w.cache || someMethod(); return w.cache;}(window);
于 2012-09-01T09:43:55.697 回答
0

做到这一点的干净方法(即使使用布尔值)将是

   if (cache === undefined) { cache = someMethod (); }
   x = cache;
于 2012-09-01T09:24:36.967 回答