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 相关文章推荐
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
Dec 29 Javascript
javascript定时保存表单数据的代码
Mar 17 Javascript
javascript的数据类型、字面量、变量介绍
May 23 Javascript
js 控制下拉菜单刷新的方法
Mar 03 Javascript
JS操作JSON要领详细总结
Aug 25 Javascript
SeaJS 与 RequireJS 的差异对比
Dec 08 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
May 27 Javascript
微信小程序 自定义Toast实例代码
Jun 12 Javascript
在iframe中使bootstrap的模态框在父页面弹出问题
Aug 07 Javascript
十个免费的web前端开发工具详细整理
Sep 18 Javascript
Angular单元测试之事件触发的实现
Jan 20 Javascript
Webpack3+React16代码分割的实现
Mar 03 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
一首老MP3,致敬WAR3经典
2021/03/08 魔兽争霸
基于mysql的bbs设计(五)
2006/10/09 PHP
php 购物车的例子
2009/05/04 PHP
php Undefined index的问题
2009/06/01 PHP
php实现MD5加密16位(不要默认的32位)
2013/08/12 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
JS获取父节点方法
2009/08/20 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
javascript生成json数据简单示例分享
2014/02/14 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
JS通过位运算实现权限加解密
2018/08/14 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
python简易远程控制单线程版
2018/06/20 Python
python3转换code128条形码的方法
2019/04/17 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
化学专业毕业生自荐信
2013/11/15 职场文书
销售主管的自我评价分享
2014/01/03 职场文书
运动会稿件100字
2014/02/21 职场文书
产假请假条
2014/04/10 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
党的生日活动方案
2014/08/15 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
检讨书范文500字
2015/01/28 职场文书
志愿者服务宣传标语口号
2015/12/26 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis