全局变量 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
赋值,而且它会自动将数据进行字符串转换
那么,记录这次经历不是为了记下这个将被废弃的属性,而是要让自己了解到,查找问题、解决问题的思路与逻辑,一定要一丝不苟,容不得“想当然”的跳过