Javascript 了解JS非显而易见的oneliner。逗号分隔符
我不理解这一行javascript: (i是循环计数器) 我能理解Javascript 了解JS非显而易见的oneliner。逗号分隔符,javascript,Javascript,我不理解这一行javascript: (i是循环计数器) 我能理解值==其他?true:false技巧,但我完全被其中一个的嵌套、括号和逗号的使用弄得一团糟 有人能猜出这是怎么想的吗?我甚至没有一个示例用法:/ 我还对m=c=='@子句有疑问,它必须理解为m=c后跟c=='@'还是m=条件?值(如果为真):值(如果为假) 这里逗号的用法是否与 我想我们的目的是脱掉一些特殊的角色,但这太复杂了 我希望有很多行带有clearif子句,而不是这一行 谢谢您可以随时重新格式化三元运算符语句,使其更具可读
值==其他?true:false
技巧,但我完全被其中一个的嵌套、括号和逗号的使用弄得一团糟
有人能猜出这是怎么想的吗?我甚至没有一个示例用法:/
我还对m=c=='@
子句有疑问,它必须理解为m=c代码>后跟c=='@'
还是m=条件?值(如果为真):值(如果为假)
这里逗号的用法是否与
我想我们的目的是脱掉一些特殊的角色,但这太复杂了
我希望有很多行带有clearif
子句,而不是这一行
谢谢您可以随时重新格式化三元运算符语句,使其更具可读性。格式化是您发现<代码>更具可读性的原因之一:
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)。您始终可以重新格式化三元运算符语句,使其更具可读性。格式化是您发现<代码>更具可读性的原因之一:
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)。编写该代码的人似乎在尝试验证给定字符串是否为有效的电子邮件id,尽管这是一种糟糕的方法。应该使用正则表达式。@tea_totaler你有一个适合JS的正则表达式模式吗?编写该模式的人应该是shot。代码似乎在尝试验证给定的字符串是否为有效的电子邮件id,尽管这样做很糟糕。应该使用正则表达式。@tea\u totaler你有一个适合JS的正则表达式模式吗?