Javascript 函数返回零,但为什么当方法拼写错误时它不会失败?
在for循环中:counterJavascript 函数返回零,但为什么当方法拼写错误时它不会失败?,javascript,function,Javascript,Function,在for循环中:counter
function countBs(x){
var lCounter = 0;
for (var counter = 0; counter < (x.lenght); counter++){
if((x.charAt(counter)) == "B"){
lCounter++;
}
}
return lCounter;
}
console.log(countBs("BCBDB"));
访问x.lenght返回未定义,导致for循环立即终止。因此,将返回lCounter的初始值
您可以使用in关键字检查对象中是否存在属性,如:
if ( 'lenght' in x ) {
...
JavaScript执行各种疯狂的转换,而不是抛出错误: 特别是当需要时,最后一个表的最后一行中的“undefined”变为NaN,与一个数字比较时,无论,=、==或!=,它们都失败了,NaN甚至不等于它自己。x.lenght返回未定义。比较运算符执行自动类型转换,因此undefined将转换为数字以执行比较,并转换为NaN。与NaN的任何比较都返回false,因此循环结束 Javascript没有捕捉到这个错误,因为它使用松散类型,在大多数情况下会根据需要自动转换类型
没有简单的方法可以确保像这样的打字错误被发现。如果您提供了良好的类型注释,一个好的IDE可能能够检测到它。如果您希望捕获或记录错误以确保定义了变量属性。请参阅下面的代码:
function countBs(x){
var lCounter = 0;
if(typeof x.lenght == 'undefined')
{
console.log('Undefined poperty lenght on variable x');
return 'Error catch';
}
for (var counter = 0; counter < (x.lenght); counter++){
if((x.charAt(counter)) == "B"){
lCounter++;
}
}
return lCounter;
}
console.log(countBs("BCBDB"));
要捕获此特定错误,请将lCounter设置为-1而不是0
这将确保如果for条件正确,循环将至少运行一次
如果未输入循环,则可以返回或抛出错误
否则,返回lCounter+1以说明-1的初始化
function countBs(x) {
var lCounter = -1;
for (var counter = 0; counter < (x.lenght); counter++) {
if((x.charAt(counter)) == "B") {
lCounter++;
}
}
if(lCounter == -1) {
return 'Error';
} else {
return lCounter + 1;
}
}
除此之外,请参阅有关此错误的未定义属性和错误捕获的说明。请看,除了使用in?x显然是一个字符串之外,还有没有一种方法可以让javascript自动捕获名称错误,因此in对它不起作用。如果有帮助,我建议添加条件typeof。请看一些解释。