【问题标题】:Reactjs - SyntaxError: Octal literals are not allowed in strict modeReactjs - SyntaxError:严格模式下不允许使用八进制文字
【发布时间】:2021-08-18 03:35:43
【问题描述】:

我的应用程序组件在 reactjs 中有以下代码:

function App() {
  var [expression, setExpression] = useState("");
  var [result, setResult] = useState("");

  return (
    <div className="App">

    <div id="equals">
{result}
    </div>
<div id="display">
{expression}

</div>
<button id='zero' onClick={() => setExpression(expression + "0")}>0 </button>
<button id='one' onClick={() => setExpression(expression + "1")}>1 </button>
<button id='two' onClick={() => setExpression(expression + "2")}>2 </button>
<button id='three' onClick={() => setExpression(expression + "3")}>3 </button>
<button id='four' onClick={() => setExpression(expression + "4")}>4 </button>
<button id='five' onClick={() => setExpression(expression + "5")}>5 </button>
<button id='six' onClick={() => setExpression(expression + "6")}>6 </button>
<button id='seven' onClick={() => setExpression(expression + "7")}>7 </button>
<button id='eight' onClick={() => setExpression(expression + "8")}>8 </button>
<button id='nine' onClick={() => setExpression(expression + "9")}>9 </button>
<button id="add" onClick={() => setExpression(expression + "+")}>+</button>
<button id="subtract" onClick={() => setExpression(expression + "-")}>-</button>
<button id="multiply" onClick={() => setExpression(expression + "*")}>*</button>
<button id="divide" onClick={() => setExpression(expression + "/")}>/</button>
  <button id="equals" onClick={() => setResult(eval(expression))}>=</button>
    </div>

  );
}

但是当我打开浏览器时出现错误:

SyntaxError: Octal literals are not allowed in strict mode.

我不知道如何解决它。提前致谢。

【问题讨论】:

  • 它很可能来自eval(expression)。但我们无法知道 expression 是什么,但它可能包含类似 08 的内容(数字前面为零)。

标签: javascript html reactjs


【解决方案1】:

这有点微妙。问题是您正在连接字符串。在某些时候,您似乎单击了0 按钮,然后单击了任何其他数字按钮。这意味着你最终会得到 expression"01" 或类似的。这是一个遗留的八进制文字,(正如您所发现的)在严格模式下是不允许的。

您需要更新添加到表达式中的代码,以便当它要添加数字 1 到 9 时,它会查看最后一个之后是否有 0(并且只有 0)运算符,如果是,则在添加数字之前删除 0

例如,如果expression"1+0",则单击2 应在添加"2" 之前删除该"0",以便它最终成为"1+2",而不是"1+02"

【讨论】:

  • 这解决了这段代码存在的问题之一。它只是构建一个字符串并将其评估为 JS,但它绝不会尝试使其成为 valid JS 或类似的东西。所以你可以输入2++ 并因此得到一个神秘的错误。或者通过将这些字符组合在各种字符串中得到其他奇怪的结果,这些字符串甚至可能是有效的 JS,但不是数学公式。 2-+-3 是返回 5 的有效 JS (2 - (+(-3))。但我不希望计算器能做到这一点。
  • @VLAZ - 这是真的,但这是 OP 询问的问题。有时我会避免质疑问题中代码的整个上下文。 :-D 我假设在这种情况下这是一个简单的学习任务,并不意味着它的输入那么健壮......
猜你喜欢
  • 2016-08-21
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 2018-11-11
  • 1970-01-01
  • 2021-08-29
  • 2016-03-25
相关资源
最近更新 更多