'SyntaxError: Invalid shorthand property initializer' when using regex

'SyntaxError: Invalid shorthand property initializer' when using regex

我正在尝试使用以下函数验证 pin

function validate(num){
  num.length === 4 || num.length === 6 ? {
    regex = /\d+/,
    regex:test(num)
  } 
  :
  false
}

但是我收到了这个错误,我不知道为什么

    /home/runner/index.js:3
    regex = /\d+/,
    ^^^^^^^^^^^^^

SyntaxError: Invalid shorthand property initializer

您不能在语句中使用 ?: 运算符;只有表达式。

但是,无需在此处为您的正则表达式定义变量。您可以直接在正则表达式文字上调用 .test

function validate(num){
  return num.length === 4 || num.length === 6 ? /\d+/.test(num) : false
}

更好的是,只需使用 && 运算符,这在逻辑上等效于:

function validate(num){
  return (num.length === 4 || num.length === 6) && /\d+/.test(num);
}

正如其他人所指出的,您不能将语句放在条件表达式(或任何其他表达式)中,您只能放在表达式中。

你得到的错误是因为它认为你正在尝试编写对象文字,但你不能在对象文字中进行赋值。

您可以使用正常的 if 语句:

if (num.length == 4 || num.length == 6) {
    var regex = /\d+/;
    return regex.test(num);
} else {
    return false;
}

但是根本不需要条件,您可以在正则表达式本身中测试长度。

function validate(num) {
    return /^\d{4}$|^\d{6}$/.test(num);
}

虽然我不能在这里推荐,但重要的是要记住 function expression 可以在表达式上下文中使用。这是一直在做的,比如回调,同样的概念可以转移到其他地方..

这是对原始文件的最小转换(它保留了与原始文件一样多的错误和其他功能,除了它们导致解析错误的地方),显示了一个函数表达式。这种特殊情况也称为 "IIFE".

function validate(num){
  return num.length === 4 || num.length === 6
   ? (function() {
       let regex = /\d+/; 
       return regex.test(num);
     })()
   : false;
}