javascript - js这个while循环有什么用?

查看:86
本文介绍了javascript - js这个while循环有什么用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

var k = 0;
var arr = [1,2,3,4,5,6];
var len = arr.length;
while (k < len && !(k in arr)) {
        k++; 
}

摘自

if (!Array.prototype.reduce) {
  Array.prototype.reduce = function(callback /*, initialValue*/) {
    'use strict';
    if (this === null) {
      throw new TypeError('Array.prototype.reduce called on null or undefined');
    }
    if (typeof callback !== 'function') {
      throw new TypeError(callback + ' is not a function');
    }
    var t = Object(this), len = t.length >>> 0, k = 0, value;
    if (arguments.length == 2) {
      value = arguments[1];
    } else {
      while (k < len && !(k in t)) {
        k++; 
      }
      if (k >= len) {
        throw new TypeError('Reduce of empty array with no initial value');
      }
      value = t[k++];
    }
    for (; k < len; k++) {
      if (k in t) {
        value = callback(value, t[k], k, t);
      }
    }
    return value;
  };
}

解决方案

好吧,原来是源码抽取来的,应该是为了找到arr中第一个值的索引

比如

arr = [1, 2, 3]
delete(arr[0])
0 in arr // false
1 in arr // true

因为把arr[0]删掉了,arr中第一个数字的索引值就变成1了,此时k = 1

因为当arguments.length != 2的时候,意味着用户没提供reduce的初始值,
所以就要找到arr中的第一个有效值arr[k]赋给value作为初始值

题主你提供这个版本的实现应该是有bug的,你自己试一下把你的Array.prototype.reduce实现复制进console,然后输入以下代码

arr = [1, 2, 3]

arr.reduce( (s, i) => s+i ) // 6
arr.reduce( (s, i) => s+i, 1 ) // 7
arr.reduce( (s, i) => s+i, 1, 2 ) // 6

然后就会发现,当arguments.length == 3时,reduce是会忽略你提供的初始值的

这篇关于javascript - js这个while循环有什么用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆