JavaScript 数组循环引起的思考

 更新时间:2010年01月01日 00:07:12   作者:  
Google array.js 程序中建议改进的代码。思考为什么i-- 到了 i为0时while循环结束了?
看代码,不说话:
复制代码 代码如下:

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实现获取img的原始尺寸的方法详解

    JavaScript实现获取img的原始尺寸的方法详解

    在微信小程序开发时,它的image标签有一个默认高度,这样你的图片很可能出现被压缩变形的情况,所以就需要获取到图片的原始尺寸对image的宽高设置,本文就来分享一下JavaScript实现获取img的原始尺寸的方法吧
    2023-03-03
  • JS首屏加载时间优化的解决方法总结

    JS首屏加载时间优化的解决方法总结

    首屏加载时间是一个衡量网页性能和用户体验的关键指标,这个问题无论是在面试中还是在项目开发中都占有极其高的权重,本文为大家整理了几种JS中优化首屏加载时间的方法,希望对大家有所帮助
    2024-02-02
  • Javascript数组的排序 sort()方法和reverse()方法

    Javascript数组的排序 sort()方法和reverse()方法

    JavaScript提供了sort()方法和reverse()方法,使得我们可以简单的对数组进行排序操作和逆序操作
    2012-06-06
  • JavaScript常用工具函数大全

    JavaScript常用工具函数大全

    这篇文章主要介绍了JavaScript常用工具函数,汇总整理了各种JavaScript常用工具函数,包括获取、判断、转换、设置等相关功能函数的定义与使用方法,需要的朋友可以参考下
    2020-05-05
  • Three.js入门之hello world以及如何绘制线

    Three.js入门之hello world以及如何绘制线

    这篇文章主要给大家介绍了关于Three.js入门之hello world以及如何绘制线的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • 用javascript实现的激活输入框后隐藏初始内容

    用javascript实现的激活输入框后隐藏初始内容

    用javascript实现的激活输入框后隐藏初始内容...
    2007-06-06
  • uniapp微信小程序底部动态tabBar的解决方案(自定义tabBar导航)

    uniapp微信小程序底部动态tabBar的解决方案(自定义tabBar导航)

    tabBar如果应用是一个多tab应用,可以通过tabBar配置项指定tab栏的表现,以及tab切换时显示的对应页,下面这篇文章主要给大家介绍了关于uniapp微信小程序底部动态tabBar的解决方案,需要的朋友可以参考下
    2022-04-04
  • uniapp动态修改元素节点样式详解

    uniapp动态修改元素节点样式详解

    这篇文章主要介绍了uni-app动如何态修改元素节点样式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • 详解JS中的对象字面量

    详解JS中的对象字面量

    这篇文章主要介绍了JS中的对象字面量,对ES6感兴趣的同学,可以参考下
    2021-05-05
  • 利用WebBrowser彻底解决Web打印问题(包括后台打印)

    利用WebBrowser彻底解决Web打印问题(包括后台打印)

    BS架构下的打印大家是怎么解决的呢,我最近作了一个项目正好负责这一块,不仅要求打印页面的特定部分,还要求有后台的批量打印,在网上查了一些资料,最后终于解决了。
    2009-06-06

最新评论