全局变量 window.status

参考资料:

在使用apiCloud编写手机App的项目里,有部分使用纯原生js实现的功能,在这里调试的时候,我遇到了一个奇怪的问题,简单地说,他是这样的:

var status = ['111', '222'];
for (var i = 0;i < status.length;i++) {
	// 处理数据
	console.log(status[i]); // 1 1 1 , 2 2 2
}

我的本意是打算把'111''222'当作参数来处理的,但是结果却超出我的预料
它居然循环出了:'1' '1' '1' ',' '2' '2' '2'总计6个参数

看结构,它似乎是对处理的数组进行了字符串转换,但是我并没有做此操作
第一想法,是不是appCloud哪里做了特殊处理,毕竟这是在它家的平台运行,但是并没有找到相关处理

在寻人讨论的时候,他说了一句:你在浏览器调试试试,看有没有这个问题
听到这话的我,内心其实是抗拒的,这么简单的代码,看一眼就知道结果,还要跑去浏览器去调试?那不是多此一举么

然后我就被打脸了,浏览器的调试工具输出了一样的结果···

这···这···最基础的调试方法狠狠的打了一耳光

所以再仔细分析问题,把var换成let/const,打印结果如预期

const status = ['111', '222'];
for (var i = 0;i < status.length;i++) {
	// 处理数据
	console.log(status[i]); // 111 222
}

那么用var的问题,自然是全局变量的问题,那对应的全局变量就是:window.status

一个早期用来显示浏览器加载状态的文本信息字段,只能用来存储String类型,所以用var定义时,实际上是在给window.status赋值,而且它会自动将数据进行字符串转换

那么,记录这次经历不是为了记下这个将被废弃的属性,而是要让自己了解到,查找问题、解决问题的思路与逻辑,一定要一丝不苟,容不得“想当然”的跳过