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 相关文章推荐
JS代码放在head和body中的区别分析
Dec 01 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
Mar 14 Javascript
AngularJS的内置过滤器详解
May 14 Javascript
javascript正则表达式总结
Feb 29 Javascript
基于jQuery实现数字滚动效果
Jan 16 Javascript
jquery之基本选择器practice(实例讲解)
Sep 30 jQuery
Angular2开发环境搭建教程之VS Code
Dec 15 Javascript
JavaScript比较同一天的时间大小实例代码
Feb 09 Javascript
微信小程序下拉框搜索功能的实现方法
Jul 31 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
Jan 21 Javascript
JavaScript最完整的深浅拷贝实现方式详解
Feb 28 Javascript
vue css 相对路径导入问题级踩坑记录
Jun 05 Vue.js
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基础知识回顾
2012/08/16 PHP
php使用cookie保存登录用户名的方法
2015/01/26 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
jquery 快速回到页首的方法
2013/12/05 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
一段非常简单的js判断浏览器的内核
2014/08/17 Javascript
详解Javascript继承的实现
2016/03/25 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
基于Phantomjs生成PDF的实现方法
2016/11/07 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
2017/01/22 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
Vuex 使用 v-model 配合 state的方法
2018/11/13 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
详解python之配置日志的几种方式
2017/05/22 Python
Python cookbook(数据结构与算法)筛选及提取序列中元素的方法
2018/03/19 Python
python实现随机调用一个浏览器打开网页
2018/04/21 Python
python selenium firefox使用详解
2019/02/26 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
Python PO设计模式的具体使用
2019/08/16 Python
简述 Python 的类和对象
2020/08/21 Python
Python datetime 如何处理时区信息
2020/09/02 Python
LN-CC美国:伦敦时尚生活的缩影
2019/02/19 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
社团文化节策划书
2014/02/01 职场文书
文明宿舍获奖感言
2014/02/07 职场文书
建国大业观后感
2015/06/01 职场文书
员工工作心得体会
2019/05/07 职场文书
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript