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 相关文章推荐
javascript 设置某DIV区域内的checkbox复选框
Nov 30 Javascript
jquery1.4 教程二 ajax方法的改进
Feb 25 Javascript
js获取html文件的思路及示例
Sep 17 Javascript
JavaScript表单通过正则表达式验证电话号码
Mar 14 Javascript
jQuery带箭头提示框tooltips插件集锦
Nov 17 Javascript
浅谈angularJS 作用域
Jul 05 Javascript
jQuery Validate表单验证深入学习
Dec 18 Javascript
bootstrap实现图片自动轮播
Dec 21 Javascript
深入理解ES6 Promise 扩展always方法
Sep 26 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
May 07 Javascript
Vue 开发必须知道的36个技巧(小结)
Oct 09 Javascript
Js图片点击切换轮播实现代码
Jul 27 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
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
php制作文本式留言板
2015/03/18 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
2017/07/20 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
[48:31]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第一场 2月2日
2021/03/11 DOTA
Cython 三分钟入门教程
2009/09/17 Python
python 中random模块的常用方法总结
2017/07/08 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
2018/04/19 Python
利用pyinstaller将py文件打包为exe的方法
2018/05/14 Python
python设置值及NaN值处理方法
2018/07/03 Python
pandas值替换方法
2018/07/10 Python
Java文件与类动手动脑实例详解
2019/11/10 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
Python几种常见算法汇总
2020/06/02 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
Python爬取梨视频的示例
2021/01/29 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
运动会稿件200字
2014/02/07 职场文书
元旦联欢会感言
2014/03/04 职场文书
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
同学毕业留言寄语
2015/02/27 职场文书
2015年派出所工作总结
2015/04/24 职场文书
交通安全教育主题班会
2015/08/12 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js