我正在为1级单身学生学习JavaScript基础知识做一个简短的教程。任务是验证电话号码。该号码不得包含非数字,且长度不得超过14位。以下代码摘录是我提出的内容,我希望尽可能让它变得可读。
if (
//set of rules for invalid phone number
phoneNumber.length == 0 //empty
|| phoneNumber.length > 14 //too long
|| /\D/.test(phoneNumber) //contains non-digits
) {
setMessageText(invalid);
} else {
setMessageText(valid);
}
一个简单的问题我无法回答自己,并希望听到您的意见:如何定位周围(最外面)的括号?很难看出普通和大括号之间的区别。您是否经常将最后)
与最后一个条件放在同一行?您是否将第一个开口(
单独保留在一条线上?您是否也将每个子条件包装在括号中?您是否将第一个(
与最后一个)
水平对齐,或者将最后一个)
放在与if
相同的列中?
您是否将) {
放在单独的一行上,或者将最后一个)
放在与最后一个子条件相同的行上,然后将开头{
放在新行上?或者你只是将) {
放在与最后一个子条件相同的行上?
社区维基。
修改 请仅发布有关括号的使用和放置的意见。代码不需要重新考虑。这适用于几周前才引入JavaScript的人。我不是在征求意见如何编写代码,因此它更短或性能更好。我只想知道如何在IF条件下放置括号。
答案 0 :(得分:5)
我会将用于验证电话号码的逻辑重构为函数:
function isValidPhoneNumber(phone) {
if (phone.length == 0) return false;
if (phone.length > 14) return false;
return !/\D/.test(phone);
}
或者您也可以使用正则表达式检查长度:
function isValidPhoneNumber(phone) {
return /^\d{1,14}$/.test(phone);
}
使用验证电话号码的功能,代码变得更简单:
if (isValidPhoneNumber(phoneNumber)) {
setMessageText(valid);
} else {
setMessageText(invalid);
}
甚至:
setMessageText(isValidPhoneNumber(phoneNumber) ? valid : invalid);
答案 1 :(得分:1)
message = invalid
if(phoneNumber.length > 0 && phoneNumber < 14 && /\D/.test(phonenumber)){
message = valid
}
setMessageText(message)
基本上,在证明有效之前无效是更安全的,但这是完全主观的。
也:
if(...){
}
总是好于:
if(...)
{
}
在javascript中 - 这是因为分号插入,这可能不是问题,但在其他情况下也是如此,因此在使用该语言时最好保持相同的习惯。
最后,我不会用更多的括号来重载代码,特别是当事情都是“AND”时 - 当混合运算符优先时,重要的是包含额外的括号,因为不是每个人都想要在阅读代码时要考虑这一点。
但这有点主观。遗憾。
答案 2 :(得分:1)
TUH-MAY-趾
趾-MAH-TUH
除了奇怪的习惯,“可读”是你常常看到的
我会像这样格式化你的例子:
//set of rules for invalid phone number:
// - not empty
// - not too long (14 characters)
// - can contain only digits
if (phoneNumber.length == 0 ||
phoneNumber.length > 14 ||
/\D/.test(phoneNumber))
{
setMessageText(invalid);
}
else
{
setMessageText(valid);
}
因为我更喜欢看到逻辑一起解释而不是散布在代码语句中。而且我自己喜欢在一条线上使用括号来使这些块更好。
但是 - 正如其他人所指出的 - 对于这个例子的“最终”可读性,它应该被重构为至少一个isValidPhoneNumber
函数