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限制文本框为整数和货币的函数代码
Oct 13 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
Jan 01 Javascript
关于javascript function对象那些迷惑分析
Oct 24 Javascript
页面实时更新时间的JS实例代码
Dec 18 Javascript
jQuery插件MixItUp实现动画过滤和排序
Apr 12 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
Oct 27 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
vue 自定义指令自动获取文本框焦点的方法
Aug 25 Javascript
vue+iview动态渲染表格详解
Mar 19 Javascript
vue + elementUI实现省市县三级联动的方法示例
Oct 29 Javascript
Vue中强制组件重新渲染的正确方法
Jan 03 Vue.js
解析原生JS getComputedStyle
May 25 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
将OICQ数据转成MYSQL数据
2006/10/09 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
JQuery给select添加/删除节点的实现代码
2016/04/26 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
AngularJS实现表单验证功能详解
2017/10/12 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
2020/02/04 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
python下载文件时显示下载进度的方法
2015/04/02 Python
python基础教程项目五之虚拟茶话会
2018/04/02 Python
Python创建普通菜单示例【基于win32ui模块】
2018/05/09 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
Python实现带参数的用户验证功能装饰器示例
2018/12/14 Python
python开启debug模式的方法
2019/06/27 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
h5网页水印SDK的实现代码示例
2019/02/19 HTML / CSS
五水共治一句话承诺
2014/05/30 职场文书
物业品质提升方案
2014/06/08 职场文书
应届生求职自荐信
2014/07/04 职场文书
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS