我在下面的代码中犯了一个错误。在变量“x”中,我存储了字符串“s”中的一个字符。然后,我错误地增加了“x”,这导致了代码后给出的错误。为什么 JS 允许我首先增加一个字符变量?如何防止发生此类错误?
function jsFun(s){
var x = s.charAt(0);
s++;//Wrong !
x = s.charAt(1);
return x;
}
console.log(jsFun("one"));
Run Code Online (Sandbox Code Playgroud)
错误:在第 4 行。
TypeError: s.charAt is not a function
Run Code Online (Sandbox Code Playgroud)
因为 ECMAScript 语言规范允许https://www.ecma-international.org/ecma-262/5.1/#sec-11.4.4。
++一元运算符抛出 SyntaxError的唯一时间是以下所有情况都为真:
否则,它会尝试将该值解析为一个数字并将其加一。字符串不符合抛出标准,因此它被解析为一个数字(导致NaN您的示例),然后在将其值增加 1 后,它仍然返回NaN.
如果字符串是数字,例如"1234",您会看到它变成了一个数字并增加了 1,正如您对数字所期望的那样。charAt但是,一旦您尝试调用该函数,您的代码就会出错,因为数字没有该函数。
为了使用普通的 Javascript 防止这种行为,您可以在增加变量之前检查变量是否为非 NaN 数
if (!Number.isNaN(s)) {
s++
}
Run Code Online (Sandbox Code Playgroud)
isNaN如果您想验证字符串是否为数字,您也可以使用。
另外,就像其他答案所说的那样,您可以使用类型检查的替代方法(例如 Typescript)或静态类型检查器(例如 flow.js)来防止在编译时出现这些错误。
| 归档时间: |
|
| 查看次数: |
181 次 |
| 最近记录: |