Javascript速记

Javascript速记,javascript,Javascript,考虑以下示例: if (cache) { x = cache; } else { x = cache = someMethod(); } 是否要使此缓存比缓存短?x=cache:x=cache=someMethod() 编辑: 感谢所有建议的解决方案,我应该注意到问题中的数据是字符串而不是布尔值。实现这一点的干净方法(即使使用布尔值)是 x = cache || (cache = someMethod()); 要做到这一点(即使使用bools),最干净的方法是 如果不确定之前

考虑以下示例:

if (cache) {
    x = cache;
} else {
    x = cache = someMethod();
}
是否要使此缓存比
缓存短?x=cache:x=cache=someMethod()

编辑:

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

实现这一点的干净方法(即使使用布尔值)是

x = cache || (cache = someMethod());
要做到这一点(即使使用bools),最干净的方法是


如果不确定之前是否声明和/或分配了
缓存
,则这是对s答案的修正(使用和):

在严格的模式下,这也不起作用。在这种情况下,这将:

'use strict';
var x = function(w){w.cache = w.cache || someMethod(); return w.cache;}(window);

如果不确定之前是否声明和/或分配了
缓存
,则这是对s答案的修正(使用和):

在严格的模式下,这也不起作用。在这种情况下,这将:

'use strict';
var x = function(w){w.cache = w.cache || someMethod(); return w.cache;}(window);


或者x=cache=cache | | someMethod()@Qnan很好,您保存了两个括号,但始终为
缓存
赋值,即使它是真实的。哦,好吧……很好,有条件的作业。有一个问题:
cache=someMethod()
语句是否返回
someMethod()
的值?如果从未分配过缓存,这将抛出一个
ReferenceError
@KooiInc我认为根据Kay编写的代码,可以安全地假设它已经分配了。或者x=cache=cache | someMethod()@Qnan Nice,您保存了两个括号,但始终为
缓存
赋值,即使它是真实的。哦,好吧……很好,有条件的作业。有一个问题:
cache=someMethod()
语句是否返回
someMethod()
?如果从未分配缓存,这将抛出一个
ReferenceError
@KooiInc我认为根据Kay编写的内容,可以安全地假设它已经分配了。
如果(!cache){…}
而不是
如果(cache==undefined){…}
?如果Kay对
If(cache)
没有问题,我想不改变它是可以的。如果
cache
0
false
null
,如果
someMethod
的结果是一个布尔值或一个可能是零或字符串的数字,
!cache
不确定是否设置了缓存。@JohnB这有关系吗?你不知道Kay是否真的想知道是否设置了
缓存
。不,我不知道。但这是唯一对我有意义的原因。
如果(!cache){…}/code>而不是
如果(cache==未定义){…}
?如果Kay对
If(cache)
没有问题,我认为不改变它是可以的。即使
cache
0
false
null
…如果
someMethod
的结果是布尔值或可能是零的数字或字符串,
!cache
不确定是否设置了缓存。@JohnB这有关系吗?你不知道Kay是否真的想知道是否设置了
缓存
。不,我不知道。但这是唯一对我有意义的原因。我认为“真正”的修改应该是
x=window.cache | |(cache=someMethod())
,这看起来是一种不同的方法。无论如何,如果没有声明
缓存
,两者都会在严格模式下失败。是的,ECMAscript非常灵活,所以经常有替代方案。顺便说一句,为答案添加了一个
严格模式
解决方案。我认为“真正”的修改应该是
x=window.cache | |(cache=somethod())
,这看起来是一种不同的方法。无论如何,如果未声明
缓存
,两者都会在严格模式下失败。是的,ECMAscript非常灵活,因此经常有替代方案。顺便说一句,在答案中添加了
严格模式
解决方案。
'use strict';
var x = function(w){w.cache = w.cache || someMethod(); return w.cache;}(window);