理解一个JS不明显的在线程序.逗号分隔符
understand a JS non obvious oneliner. Comma separator
我看不懂这行javascript:
(i是一个循环计数器)
var m;
t[i] == '@' ? m = '' : t[i] == '_' ? m = null : (c = t[i].charAt(0), m = c == '@' || c == '_' ? t[i].substring(1) : t[i])
我可以理解value == other ? true : false
的技巧,但是我完全被其中一个的嵌套,括号和逗号的使用搞糊涂了。
有谁能猜出这个想法是做什么的吗?我甚至没有一个示例用法:/因为调用有bug…
我对m = c == '@
条款也有疑问,它应该理解为m = c ;
后面跟着c == '@'
还是m = condition ? value if true : value if false) ?
是逗号在这里的用法与使用a相同;
?我认为目的是剥离一些特殊字符@和_,但它是如此复杂!
我希望有许多行明确的if
子句,而不是这一行
谢谢
您总是可以重新格式化三元操作符语句以使其更具可读性。格式化是您发现if
更具可读性的原因之一:
t[i] == '@' ?
m = '' : // if it's an @
t[i] == '_' ? // else:
m = null : // if it's a _
( // else:
c = t[i].charAt(0), // c = first character
m = // m = one of the following:
c == '@' || c == '_' ? // if @ or _ is first character
t[i].substring(1) : // the string minus @ or _
t[i] // else the string itself
)
注意,最外层的三元操作符的结果将被丢弃,这是非常非常丑陋的代码。相反,它滥用了三元操作符的条件部分可以是表达式的事实,并在那里对m进行赋值。
基本上,上面是一种令人费解的书写方式:
if (t[i] =='@') {
m = '';
}
else if (t[i] =='_') {
m = null;
}
else {
m = t[i].replace(/^[@_]/,''); // replace leading @ or _ with nothing
}
如果您仍然需要使用三元操作符而不使用正则表达式,则更好的实现是:
var str = t[i];
var c = str.charAt(0);
m = str == '@' ? // if @
'' :
str == '_' ? // if _
null :
(c == '@' || c == '_') ? // if starts with @ or _
str.substring[1] :
// else don't modify the string
str;
注意,在上面的语句中,我们将三元操作符的结果赋值给m
,而不是在任何求值语句中进行赋值。首先,这是三元操作符相对于if
的优势。还要注意,大括号()
严格来说是不必要的,但它们增加了代码的可读性(IMHO)。
相关文章:
- 如何使用url加载程序在webpack中导入多个图像
- keyup事件处理程序更改焦点不适用于快速键入
- 用程序搜索JQuery数据表中的文本
- 如何使用一个代码库在线和离线访问 HTML5/JS 应用程序中的数据库
- 可下载或在线使用的Css和javascript迷你程序
- 将HTML5 PhoneGap应用程序连接到在线数据库
- 视窗 8 应用程序在线数据
- 在线投票应用程序.如何避免同一用户的重复投票
- 如何在线注册jQuery点击处理程序
- 在线youtube视频没有'不能在iOS上的cordova应用程序中工作
- phonegap炒作在线和离线应用程序
- 具有颜色和形状的HTML/Ajax在线配置程序
- 如何从离线可用的web应用程序访问在线资源
- 如何在线发布Node.js服务器,以便外部应用程序始终可以访问它
- 在Ember.js应用程序中显示在线和离线(例如飞机)模式
- 理解一个JS不明显的在线程序.逗号分隔符
- 有没有一种方法,从一个在线应用程序提交表单,而不使用硒或浏览器客户端
- 在Ruby on Rails 3应用程序中查看并与您网站上当前的在线用户交谈
- 如何使用Chatter应用程序MVC显示用户在线
- 如何创建 Chrome 扩展程序来检测在线产品列表,并定期检查价格变化