if-else、switch 和正则表达式之间的复杂性

Complexity between if-else, switch and regex

我要优化 javascript 代码,我看到旧代码如下,

var emcont = $('#emcont').val();
numericMatch = emcont.match(/\d/g);
if (numericMatch == null) {
    isValid = false;
    $('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (emcont.length != 14) {
    isValid = false;
    $('#msg_emcont').html(getMessage('msg_emcont')).show();
} else if (numericMatch.length && numericMatch.length != 10) {
    isValid = false;
    $('#msg_emcont').html(getMessage('msg_emcont')).show();
} else {
    $('#msg_emcont').html('').hide();
}

我打算将 if-else 条件转换为 switch 条件,但是上面代码中的问题是第二个条件验证使用了 emcont 变量,所以我不能直接在 [= 中使用 numericMatch 14=] 语句。所以我决定直接在 switch 语句中使用 emcont 变量,如下面的代码,

switch(emcont)
    {
        case emcont.match(/\d/g) == null:
            isValid = false;
            $('#msg_emcont').html(getMessage('msg_emcont')).show();
            break;
        case emcont.length != 14:
            isValid = false;
            $('#msg_emcont').html(getMessage('msg_emcont')).show();
            break;
         case emcont.match(/\d/g).length && emcont.match(/\d/g).length != 10:
            isValid = false;
            $('#msg_emcont').html(getMessage('msg_emcont')).show();
            break;
        default:
            $('#msg_emcont').html('').hide();
            break;
    }

在 switch case 验证中使用正则表达式,所以我需要知道哪个代码在性能方面更好。

请不要滥用 switch(true) 的副作用,这正是您的意思

这是干的,更容易阅读

var emcont = $('#emcont').val();
const numericMatch = emcont.match(/\d/g);
$('#msg_emcont')
  .html(getMessage('msg_emcont'))
  .toggle(
    numericMatch == null || 
    emcont.length != 14  || 
    (numericMatch.length && numericMatch.length != 10)
  )

你甚至可以考虑搬家

$('#msg_emcont').html(getMessage('msg_emcont'))

到页面加载所以它只完成一次