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