问题来源
最近在重新复习js,在通过使用js实现输出质数的时候的发现了一个关于js中用status作为变量名所发生的问题。
var status = 0;
for(var i = 2;i <= 100;i++){
for(var j = 1;j <= i;j++){
if(i % j == 0){
status += 1;
}
}
if(status == 2){
console.log(i);
}
status = 0;
}
在这里我定义了一个变量为 status 的变量名,用于记录在验证质数时的状态值,当 status 等于 2 的时候,代表这个数被整除了两次,则输出这个质数。
但是我在控制台却发现没有任何输出
这个时候问题很有可能出在了第二个if语句上面,导致没有进入这个分支语句,于是我在它的上面加了一行
console.log(status);
这个时候控制台输出了很多数据,但是这里的数据的类型都是 String 类型,很明显我上面的运算给我当成了字符串连接,但是两边都是 Number 类型,就说明问题出在 status 这个变量名上,于是我将变量名替换了一下。
var st = 0;
for(var i = 2;i <= 100;i++){
for(var j = 1;j <= i;j++){
if(i % j == 0){
st += 1;
}
}
if(st == 2){
console.log(i);
}
st = 0;
}
这个时候再看控制台
问题就这样解决了…
于是我在度娘上找了一下相关问题,然后找到了一位大佬遇到的相似问题,大家可以借鉴一下:
在这里我也查了一下,其实 status 是DOM Window的一个属性,用于设置或返回窗口状态栏中的文本。
所以在js中变量的命名不仅要避免使用js的关键字、保留字等,也要避免使用Window中的属性。