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中cookie的使用详细分析
May 28 Javascript
jQuery 学习第五课 Ajax 使用说明
May 17 Javascript
关于firefox的ElementTraversal 接口 使用说明
Nov 11 Javascript
jquery禁用右键示例
Apr 28 Javascript
jquery实现的缩略图预览滑块实例
Jun 25 Javascript
清除输入框内的空格
Dec 21 Javascript
JavaScript实现快速排序的方法分析
Jan 10 Javascript
解决循环中setTimeout执行顺序的问题
Jun 20 Javascript
详解Vue中watch对象内属性的方法
Feb 01 Javascript
微信小程序前端promise封装代码实例
Aug 24 Javascript
浅谈vue 锚点指令v-anchor的使用
Nov 13 Javascript
微信小程序用户登录和登录态维护的实现
Dec 10 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设计模式 Decorator(装饰模式)
2011/06/26 PHP
PHP 时间日期操作实战
2011/08/26 PHP
php计算函数执行时间的方法
2015/03/20 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
2017/09/13 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
2019/04/12 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
网页打开自动最大化的js代码
2012/08/22 Javascript
禁用页面部分JavaScript方法的具体实现
2013/07/31 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
解决Layui数据表格的宽高问题
2019/09/28 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
python中__call__方法示例分析
2014/10/11 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
django使用django-apscheduler 实现定时任务的例子
2019/07/20 Python
Python实现图像去噪方式(中值去噪和均值去噪)
2019/12/18 Python
python3 自动打印出最新版本执行的mysql2redis实例
2020/04/09 Python
django中related_name的用法说明
2020/05/20 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
Python 远程开关机的方法
2020/11/18 Python
python文件路径操作方法总结
2020/12/21 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
美国最大的在线水培用品商店:GrowersHouse.com
2018/08/14 全球购物
普通党员个人剖析材料
2014/10/08 职场文书
优秀少先队员事迹材料
2014/12/24 职场文书
对学校的意见和建议
2015/06/04 职场文书
2015秋季开学典礼新闻稿
2015/07/17 职场文书
详解Mysql 函数调用优化
2021/04/07 MySQL
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android