这个javascript片段被认为是坏的吗?

时间:2013-08-04 23:32:15

标签: javascript

我喜欢让我的代码尽可能简洁,但也许这是不可读的?

var filters = {};
function addFilter(type, name) {
  filters[type] && filters[type].push(name) || ( filters[type] = [name] );
}

或甚至(如答案中所指出的):

var filters = {};
function addFilter(type, name) {
  filters[type] ? filters[type].push(name) : ( filters[type] = [name] );
}

-edit -

不可读但可能是不好的风格?另一种方法是写出

var filters = {};
function addFilter(type, name) {
  if (!filters[type]) {
    filters[type]= [];
  }
  filters[type].push(name);
}

6 个答案:

答案 0 :(得分:9)

语言有成语和模式有充分理由。特别是,Javascript具有专为此目的而设计的if / else语句。应该编写代码,以便读取,因为将来它的读取频率会比写入的频率高得多。

我不接受代码审查中的上述“简洁”代码。

答案 1 :(得分:2)

你至少可以使用三元:

filters[type] ? filters[type].push(name) : ( filters[type] = [name] );

或者,您可以使用代码的扩展版本,但更简洁一点:

if ( ! filters[type] ) filters[type] = [];

filters[type].push(name);

这导致在首次创建数组时运行两个语句,但我发现这种方式更具可读性。

答案 2 :(得分:0)

我会说不必要的不​​可读。这还取决于你在做什么以及你为谁工作。如果你确定你是唯一一个支持这个应用程序的人,那么也许没关系。

答案 3 :(得分:0)

可读但也具有误导性。我对addFilter函数的期望是添加一些过滤器,如果存在,我应该得到异常或假或-1(告诉我重复的东西)

答案 4 :(得分:0)

;之后你错过了var filters = {}而且,第二种形式更好,因为新编码员更容易理解它(或将来你自己)。 您可以使用您的第一个表单并对其进行评论,但正如Sammy Larbi在Common Excuses Used To Comment Code中所说,如果您觉得您的代码太复杂而无法在没有评论的情况下理解,那么您的代码可能只是不好。< / p>

答案 5 :(得分:0)

使用&amp;&amp;和||对于那些更熟悉三元组的Javascript人来说可能有点混乱。

function addFilter(type,name) {
    filters[type] ? filters[type].push(name) : filters[type] = [name];
}