我喜欢让我的代码尽可能简洁,但也许这是不可读的?
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);
}
答案 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];
}