这种懒惰变量初始化模式是不是很糟糕的做法

时间:2014-01-02 02:54:41

标签: javascript

来自rubyesque的人群,我非常喜欢以下'懒惰'初始化模式。

myhash[:property]||='value'

有时在我的职业生涯中,我将其改编为javascript如下:

myhash.property || (myhash.property = 'value')

一位同事说这是非常不正常的,说实话,我不记得看到其他人使用这种模式。

所以我的问题是;它只是另一种无辜的初始化风格还是我无意中要求麻烦?

鉴于条件语句的执行流程,我认为可以将它用作if语句以及:

aModel.valid && aModel.save();

甚至更疯狂......

willYouMarryMe === 'yes' && (function(){
  console.log('Wohoo!');
})();

1 个答案:

答案 0 :(得分:9)

懒惰初始化通常用于JavaScript,但更常见的是:

namespace.property = namespace.property || 'default';

就调用函数而言,最好使用if语句而不是&&||。 Minifiers通常会自动将if语句转换为&&||以进行制作以减少文件大小,因此没有必要直接这样做。

编写易于阅读的代码使未来的维护更容易:

<子>好:
if (!foo) {
    bar();
}

编写难以阅读的代码会使代码难以维护。特别是因为使用一个聪明的技巧经常表明将使用其他聪明的技巧:

<子>为:
foo || bar();

关于功能的一个主要例外往往是在调用console.log

window.console&&console.log('lorem', 'ipsum');