来自rubyesque的人群,我非常喜欢以下'懒惰'初始化模式。
myhash[:property]||='value'
有时在我的职业生涯中,我将其改编为javascript如下:
myhash.property || (myhash.property = 'value')
一位同事说这是非常不正常的,说实话,我不记得看到其他人使用这种模式。
所以我的问题是;它只是另一种无辜的初始化风格还是我无意中要求麻烦?
鉴于条件语句的执行流程,我认为可以将它用作if
语句以及:
aModel.valid && aModel.save();
甚至更疯狂......
willYouMarryMe === 'yes' && (function(){
console.log('Wohoo!');
})();
答案 0 :(得分:9)
懒惰初始化通常用于JavaScript,但更常见的是:
namespace.property = namespace.property || 'default';
就调用函数而言,最好使用if
语句而不是&&
和||
。 Minifiers通常会自动将if
语句转换为&&
和||
以进行制作以减少文件大小,因此没有必要直接这样做。
编写易于阅读的代码使未来的维护更容易:
<子>好:子>if (!foo) {
bar();
}
编写难以阅读的代码会使代码难以维护。特别是因为使用一个聪明的技巧经常表明将使用其他聪明的技巧:
<子>为:子>foo || bar();
关于功能的一个主要例外往往是在调用console.log
:
window.console&&console.log('lorem', 'ipsum');