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 相关文章推荐
ExtJS 2.0实用简明教程之应用ExtJS
Apr 29 Javascript
JavaScript类和继承 constructor属性
Mar 04 Javascript
javascript学习笔记(十四) window对象使用介绍
Jun 20 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
Dec 31 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
javascript 中的事件委托详解
Oct 25 Javascript
微信小程序-获得用户输入内容
Feb 13 Javascript
JavaScript中数组Array方法详解
Feb 27 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
May 11 Javascript
JavaScript代码实现txt文件的上传预览功能
Mar 27 Javascript
javascript的this关键字详解
May 20 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
May 11 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php正则表达式学习笔记
2015/11/13 PHP
PHP在线书签系统分享
2016/01/04 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
JavaScript面象对象设计
2008/04/28 Javascript
js 覆盖和重载 函数
2009/09/25 Javascript
javascript中的一些注意事项 更新中
2010/12/06 Javascript
多种方法实现JS动态添加事件
2013/11/01 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
2013/12/05 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
将数字转换成大写的人民币表达式的js函数
2014/09/21 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
JS控制网页动态生成任意行列数表格的方法
2015/03/09 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
详解vue-cli之webpack3构建全面提速优化
2017/12/25 Javascript
Vue的事件响应式进度条组件实例详解
2018/02/04 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
联片教研活动总结
2014/07/01 职场文书
毕业典礼致辞
2015/07/29 职场文书
导游词之襄阳古城
2019/09/27 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
2022年显卡天梯图(6月更新)
2022/06/17 数码科技
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android