JavaScript 数组循环引起的思考
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中关于for循环删除数组元素内容时出现的问题
昨天用for循环进行数组去重的时候出现的问题, 首先,用双重for循环把前一个和所有后面的元素进行比较,如果相等则删除. 但是,如果数组里面有三个以上连续相等的元素的时候,就会出现问题. var arr = [1,1,1,2,2]; for(var i=0; i<arr.length-1; i++){ for(var j=i+1; j<arr.length; j++){ if(arr[i] === arr[j]){ arr.splice(j,1); } } } document.write(&
-
js数组循环遍历数组内所有元素的方法
例,for(){}遍历数组 复制代码 代码如下: <script type="text/javascript"> <!--var arr = new Array(13.5,3,4,5,6);for(var i=0;i<arr.length;i++){ arr[i] = arr[i]/2.0;}alert(arr); //--> </script> 例,for in循环遍历数组 复制代码 代码如下: <html><body>
-
js使用for循环查询数组中是否存在某个值
应为IE8不支持indexOf,所有写一个for循环方法来判断是否存在,并返回true false function isCon(arr, val){ for(var i=0; i<arr.length; i++){ if(arr[i] == val) return true; } return false; } 在js中添加此方法,在调用处调用该方法 window.onload = function(){ var arr=new Array(1,2,3,2,4,2,5,6,7,2,4,3,18
-
javascript中利用数组实现的循环队列代码
//循环队列 function CircleQueue(size){ this.initQueue(size); } CircleQueue.prototype = { //初始化队列 initQueue : function(size){ this.size = size; this.list = new Array(); this.capacity = size + 1; this.head = 0; this.tail = 0; }, //压入队列 enterQueue : functio
-
js判断数组key是否存在(不用循环)的简单实例
实例如下: var aaa = { "0":"a", "1":"b", "2":"c", "aa":"d", "4":"e" }; alert(aaa .hasOwnProperty(4));//true 以上这篇js判断数组key是否存在(不用循环)的简单实例就是小编分享给大家的全部内容了,希望能给大家一个
-
JavaScript数组和循环详解
数组是元素的一个有序组合.在JavaScript中,数组可以使用正式的对象表示法来创建,或者可以使用直接量表示法来初始化. 复制代码 代码如下: var arrObject = new Array("val1", "val2"); // 作为对象的数组 var arrLiteral = ["val1", "val2"]; // 数组直接量 对于开发者来说,这没有区别:在直接量和对象上都可以调用一个Array方法.对于JavaS
-
JS简单循环遍历json数组的方法
本文实例讲述了JS简单循环遍历json数组的方法.分享给大家供大家参考,具体如下: 例如数据库里面的json字符串是这样的 var str = '[{"name":"宗2瓜","num":"1","price":"122"},{"name":"宗呱呱","num":"1","price":
-
JS数组的遍历方式for循环与for...in
JS数组的遍历方法有两种: 第一种:一般的for循环,例如: var a = new Array("first", "second", "third") for(var i = 0;i < a.length; i++) { document.write(a[i]+","); } 输出的结果:fitst,second,third 第一种:用for...in 这种遍历的方式,例如: var arr = new Array(&
-
js 数组的for循环到底应该怎么写?
然后来看看今天我开始怀疑哪个权威哦家伙了... 自从开始学编程,自从接触到数组这个东西,我就一直在不同的地点和不同的时间不断看到有人提醒:在用for遍历数组的时候一定要用 for(var i=0,n=arr2.length;i<n;i++)的方式哦,而不要用for(var i=0;i>arr.length;i++)的方式哦,因为用脑子想想也知道,第二种方法的第二部分会一直去计算数组的length,所以自然效率比较低. 哦?我们这里不说其他程序语言,而只讨论js,因为不同的语言,实现可能不同,其
-
JavaScript 数组循环引起的思考
看代码,不说话: 复制代码 代码如下: var i=arr.length; while(i--) { //写点啥? } 上面是Google array.js 程序中建议改进的代码.思考为什么i-- 到了 i为0时while循环结束了? 下面的代码与它等价: 复制代码 代码如下: var i=arr.length; for(;i--;) { //i--写在两个分号的中间,奇怪吗?不奇怪吗? } 震撼?没感觉? 呃.平时我们写在两个分号中间的是什么?这个i--按"常理"应该是在第二个分号之
-
Javascript数组循环遍历之forEach详解
1.js 数组循环遍历. 数组循环变量,最先想到的就是 for(var i=0;i<count;i++)这样的方式了. 除此之外,也可以使用较简便的forEach 方式 2.forEach函数. Firefox 和Chrome 的Array 类型都有forEach的函数.使用如下: <!--Add by oscar999--> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> &l
-
Javascript 更新 JavaScript 数组的 uniq 方法
上次写的一篇<JavaScript 数组的 uniq 方法>,发现代码的问题还是存在.比如如果数组内有 undefined 元素就无法过滤等. 昨天看见 Lazy 兄弟重新更新了函数,现在他是这样子写的: Array.prototype.uniq = function() { var resultArr = [], returnArr = [], origLen = this.length, resultLen; function inc
-
JavaScript 数组的深度复制解析
对于javascript而言,数组是引用类型,如果要想复制一个数组就要动脑袋想想了,因为包括concat.slice在内的函数,都是浅层复制.也就是说,对于一个二维数组来说,用concat来做复制,第二维的数组还是引用,修改了新数组同样会使旧数组发生改变. 于是乎,想要写一个深度复制的函数,来帮助做组数的深度复制. 一般情况下,使用 "=" 可以实现赋值.但对于数组.对象.函数等这些引用类型的数据,这个符号就不好使了. 1. 数组的简单复制 1.1 简单遍历 最简单也最基础的方式,自然
-
详解javascript数组去重问题
首先,我想到的是另建一个结果数组,用来存储原始数组中不重复的数据.遍历原始数组依次跟结果数组中的元素进行比较,检测是否重复.于是乎,我写出了如下代码A: Array.prototype.clearRepetitionA = function(){ var result = []; var isRepetition; for(var i=0; i<this.length; i++){ isRepetition = false; for(var j=0; j<result.length; j++)
-
javascript数组去重方法分析
本文实例讲述了javascript数组去重方法.分享给大家供大家参考,具体如下: 方法一. 思路:创建一个新的空数组,循环遍历旧数组,用indexOf()方法,可以取得元素在数组中的位置,如果值为-1表示不存在.那么新数组用indexOf去获取老数组的每一个元素,如果值为-1表示不存在,就把他push到新数组里,最后输出新数组即去重后的数组 var arr=[24,56,74,89,24,56,78,09,24]; var new_arr=[]; for(var i=0;i<arr.length
-
Javascript数组Array方法解读
接上一篇<Javascript数组Array基础介绍>,这一篇详细介绍Array的所有方法. 所有数组的方法都定义在Array.prototype上,而Array.prototype本身也是一个数组. array.concat() 浅复制一份当前数组,并把接收到的参数附加到新数组的末尾.原数组不改变. 语法 array.concat(value1, value2, ..., valueN) 参数为需要合并的数组或非数组值 var arr1 = [1, 2, 3]; var obj = {ani
-
JavaScript 数组运用实现代码
截取数组:slice(startIndex,endIndex): 返回数组中指定开始位置倒结束位置的数组.不改变原数组内容. 另外还有一个重要的方法,插入.删除或替换数组元素方法: splice(startIndex,howmany,element1~elementX):会修改原数组内容.参数含义分别为:"指定开始位置","删除多少个元素个数(可以为0)","添加到数组中的新元素(从startIndex下标开始)". 相关运用 //题目一:&qu
-
JavaScript数组去重的多种方法(四种)
数组去重,一般需求是给你一个数组,调用去重方法,返回数值副本,副本中没有重复元素.一般来说,两个元素通过 === 比较返回 true 的视为相同元素,需要去重,所以,1 和 "1" 是不同的元素,1 和 new Number(1) 是不同的元素,{} 和 {} 是不同的元素(引用不同).(当然如果需求认为 {} 和 {} 算作相同的元素,那么解法就不一样了) method 1 使用两重循环 function unique(arr) { var res = []; for(var i =
-
JavaScript数组方法大全(推荐)
数组在笔试中经常会出现的面试题,javascript中的数组与其他语言中的数组有些不同,为了方便之后数组的方法学习,下面小编给大家整理了关于数组的操作方法,一起看看吧. 数组创建 JavaScript中创建数组有两种方式,第一种是使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组 var arr2 = new Array(20); // 创建一个包含20项的数组 var arr3 = new Array("lily","lucy&
随机推荐
- python根据出生年份简单计算生肖的方法
- C语言 while语句的用法详解
- Django自定义认证方式用法示例
- JavaScript 动态加载脚本和样式的方法
- javascript 的变量、作用域和内存问题
- PHP 伪静态技术原理以及突破原理实现介绍
- haskell实现多线程服务器实例代码
- 关于MySQL中savepoint语句使用时所出现的错误
- 8种MySQL分页方法总结
- Javascript点击按钮随机改变数字与其颜色
- Android recycleView的应用和点击事件实例详解
- Android 网络html源码查看器详解及实例
- C# 参考之访问关键字:base、this
- WinForm自定义控件应用实例
- 用php随机生成福彩双色球号码的2种方法
- Android实现整理PackageManager获取所有安装程序信息
- Android编程实现应用获取包名、版本号、权限等信息的方法
- 浅谈Python2获取中文文件名的编码问题
- PHP实现动态删除XML数据的方法示例
- IntelliJ IDEA 如何彻底删除项目的步骤