JavaScript 数组循环引起的思考 |
本文标签:JavaScript,数组循环 看代码,不说话: 复制代码 代码如下: var i=arr.length; while(i--) { //写点啥? } 上面是Google array.js 程序中建议改进的代码 。思考为什么i-- 到了 i为0时while循环结束了? 下面的代码与它等价: 复制代码 代码如下: var i=arr.length; for(;i--;) { //i--写在两个分号的中间,奇怪吗?不奇怪吗? } 震撼?没感觉? 呃 。平时我们写在两个分号中间的是什么?这个i--按“常理”应该是在第二个分号之后啊 。那我们看看C语言的代码: 复制代码 代码如下: int main() { int i = 5; while(i--) { printf("%d ", i); } while(1); return 0; } 运行的结果也是与JavaScript惊人的一致! 好吧 。我不知道这是为什么?只知道数值0转换成布尔值为false: var i= !!0; 而别的数值转换成布尔值为true 。上面的示例程序代码是将数值到布尔值的显式转换 。 0隐式转换为false的情况用下面的JS程序测一下: 复制代码 代码如下: var i=0; if(i) { alert(if); } else{ alert(else); } alert(不管怎么if和怎么else程序都要走这儿); if这个示例代码写得一点都不“实战”?那好吧,下面是一位土豆网前端开发高手的代码示例片段: 复制代码 代码如下: var obj = {status:0, msg:xxxx}; var data = obj.status || xxxx; 这个总够“隐蔽”的了! 再强调一次:数值0的隐式转换成布尔值为false的条件是在if()中、while()中、for(;;)两个分号的中间等布尔判定的条件表达式 。 |