JavaScript 数组循环引起的思考


Posted in Javascript onJanuary 01, 2010

看代码,不说话:

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(;;)两个分号的中间等布尔判定的条件表达式。

Javascript 相关文章推荐
jQuery EasyUI API 中文文档 - Spinner微调器使用
Oct 21 Javascript
用js实现控件的隐藏及style.visibility的使用
Jun 14 Javascript
jquery js 重置表单 reset()具体实现代码
Aug 05 Javascript
Javascript setInterval的两种调用方法(实例讲解)
Nov 29 Javascript
javascript内置对象操作详解
Feb 04 Javascript
javascript元素动态创建实现方法
May 13 Javascript
快速学习AngularJs HTTP响应拦截器
Dec 31 Javascript
微信小程序左右滑动切换页面详解及实例代码
Feb 28 Javascript
使用javascript函数编写简单银行取钱存钱流程
May 26 Javascript
vue element 生成无线级左侧菜单的实现代码
Aug 21 Javascript
JS面向对象之单选框实现
Jan 17 Javascript
Vuex中的Mutations的具体使用方法
Jun 01 Javascript
javascript eval和JSON之间的联系
Dec 31 #Javascript
js下用gb2312编码解码实现方法
Dec 31 #Javascript
JavaScript 学习笔记(七)字符串的连接
Dec 31 #Javascript
JavaScript 学习笔记(六)
Dec 31 #Javascript
JavaScript 学习笔记(五)
Dec 31 #Javascript
JavaScript 学习笔记(四)
Dec 31 #Javascript
javascript showModalDialog模态对话框使用说明
Dec 31 #Javascript
You might like
PHP 图像尺寸调整代码
2010/05/26 PHP
获取URL文件名后缀
2013/10/24 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
javascript处理table表格的代码
2010/12/06 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
浅谈JavaScript异常处理语句
2015/06/26 Javascript
通用javascript代码判断版本号是否在版本范围之间
2015/11/29 Javascript
JQuery遍历元素的父辈和祖先的方法
2016/09/18 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
Vue源码探究之状态初始化
2018/11/14 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
vue v-on:click传递动态参数的步骤
2020/09/11 Javascript
通过实例解析jQ Ajax操作相关原理
2020/09/23 Javascript
js实现有趣的倒计时效果
2021/01/19 Javascript
[49:27]LGD vs OG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
简单了解什么是神经网络
2017/12/23 Python
python实现归并排序算法
2018/11/22 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
Python 爬虫性能相关总结
2020/08/03 Python
伦敦的高级牛仔布专家:Trilogy
2018/08/06 全球购物
丽笙酒店官方网站:Radisson Hotels
2019/05/07 全球购物
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
小学教师自我鉴定
2013/11/07 职场文书
中英文自我评价语句
2013/12/20 职场文书
2014年社区植树节活动方案
2014/02/28 职场文书
村党支部书记承诺书
2014/05/29 职场文书
大学生心理健康教育心得体会
2016/01/12 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
《金色的草地》教学反思
2016/02/17 职场文书