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 相关文章推荐
页面只有一个text的时候,回车自动submit的解决方法
Aug 12 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
Oct 14 Javascript
jQuery晃动层特效实现方法
Mar 09 Javascript
js实现的下拉框二级联动效果
Apr 30 Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 Javascript
ES6解构赋值实例详解
Oct 31 Javascript
12条写出高质量JS代码的方法
Jan 07 Javascript
旺旺在线客服代码 旺旺客服代码生成器
Jan 09 Javascript
vue.js实现标签页切换效果
Jun 07 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
Aug 14 jQuery
vue打包之后生成一个配置文件修改接口的方法
Dec 09 Javascript
js实现列表向上无限滚动
Jan 13 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/01/05 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
Ajax 数据请求的简单分析
2011/04/05 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
javascript中call,apply,bind函数用法示例
2016/12/19 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
[51:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第二局
2016/03/03 DOTA
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
在Python中使用matplotlib模块绘制数据图的示例
2015/05/04 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
对python中的装包与解包实例详解
2019/08/24 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧(自定义信号与槽)详解与实例
2020/03/06 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
墨西哥运动服饰和鞋网上商店:Netshoes墨西哥
2016/07/28 全球购物
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
Ego Shoes官网:英国时髦鞋类品牌
2020/10/19 全球购物
宿舍违规用电检讨书
2014/02/16 职场文书
房屋继承公证书
2014/04/10 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
五一口号
2014/06/19 职场文书
工程部岗位职责范本
2015/04/11 职场文书
行政处罚决定书
2015/06/24 职场文书
2015年法律事务部工作总结
2015/07/27 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python
微软PC Health Check电脑健康状况检查应用下载(Win11配置检测工具)
2021/06/26 数码科技