返回当前文档中匹配一个特定选择器的第一个元素。返回的对象类型是Node
或Null
. 选择器内核为Sizzle.
selector
表示选择器。支持document.querySelector
以及element.querySelector
. 不过有个限制,element
需要是document.querySelector
或document.querySelectorAll
选择的元素。
例如下面这个在IE6~IE8下是会报错:
document.getElementById("query").querySelector(".selector");
需要这么使用:
document.querySelector("#query").querySelector(".selector");
HTML
<img src="mm1.jpg" class="bingo"> <img src="mm2.jpg" class="bingo1"> <img src="mm3.jpg" class="bingo2">
JS
var eleTestButton1 = document.querySelector("#testButton1"); if (eleTestButton1) { eleTestButton1.addEventListener("click", function() { var eleBingo = document.querySelector(".bingo"); if (eleBingo) { if (!eleBingo.style.verticalAlign) { eleBingo.style.verticalAlign = "8px"; this.value = "给我回来!"; } else { eleBingo.style.verticalAlign = ""; this.value = "走两步!"; } } }); }
返回当前文档中匹配一个特定选择器的所有的元素。在IE6-8下,返回的是装载节点集合的数组;其他浏览器为NodeList
类型。
<var>elementList</var> = document.querySelectorAll(selectors);
selectors
表示是一个由逗号连接的包含一个或多个CSS选择器的字符串。如果你想遍历所有的节点。可以试试这种用法:
var elementList = document.querySelectorAll(selectors);
[].slice.call(elementList).forEach(function(elementNode, index) {
// elementNode 就是遍历的节点
});
HTML
<img src="mm1.jpg" class="bingoAll"> <img src="mm2.jpg" class="bingoAll"> <img src="mm3.jpg" class="bingoAll">
JS
var eleTestButton2 = document.querySelector("#testButton2"); if (eleTestButton2 && !eleTestButton2.clicked) { eleTestButton2.addEventListener("click", function() { var eleBingoAll = document.querySelectorAll(".bingoAll"); [].slice.call(eleBingoAll).forEach(function(eleBingo) { eleBingo.style.padding = "3px"; eleBingo.style.border = "1px solid #aaa"; }); eleTestButton2.clicked = true; }); }
根据类名获得匹配的所有元素。在IE6-8下,返回的是装载节点集合的数组;其他浏览器为NodeList
类型。
<var>elementList</var> = document.getElementsByClassName(classNameA classNameB ...);
className
表示希望匹配的元素的类名。在IE9+浏览器下,使用的是原生getElementsByClassName
方法,其速度要比querySelector
快。支持多个类名。
HTML
<img src="mm1.jpg" class="bingoA bingoB">
JS
var eleTestButton3 = document.querySelector("#testButton3"); if (eleTestButton3) { eleTestButton3.addEventListener("click", function() { var eleBingClassName = document.getElementsByClassName("bingoA bingoB")[0]; if (eleBingClassName) { var visibility = eleBingClassName.style.visibility; if (visibility == "hidden") { this.value = "点击隐藏"; eleBingClassName.style.visibility = "visible"; } else { this.value = "点击显示"; eleBingClassName.style.visibility = "hidden"; } } }); }
在一个单一的目标上注册单一的监听事件。监听事件可以是一个文档上的元素,或者document
本身,或window
.
target.addEventListener(type, listener[, useCapture]);
type
表示监听的事件类型的字符串。比如点击事件,可以是"click"
.listener
侦听方法。在事情发生的时候,接受一个通知对象。useCapture
可选参数。如果为true
,则表示用户希望启动从外及内的捕获获取。如果该参数未指定,useCapture
为false
,表示采用从里到外的冒泡获取。目前只做了基本事件的兼容处理。低版本IE浏览器不支持的有:
XMLHttpRequest
侦听progress
audio/video等HTML5事件另外,IE6-IE8浏览器的第三个参数useCapture
实际并未作用。listener
传入对象(假设名为event)做了如下一下兼容性处理:
event
对象直接使用,而无需window.event
event.target
event.preventDefault()
可见,目前只做了些常用属性或方法的兼容处理。欢迎你一同参与更多的建设。
我在等待鼠标经过按钮哦~
HTML
<span id="txtAddEvent" style="color:#666;">我在等待鼠标经过按钮哦~</span>
JS
var eleTestAddEvent = document.querySelector("#testAddEvent") , eleTxtAddEvent = document.querySelector("#txtAddEvent"); if (eleTestAddEvent && eleTxtAddEvent) { eleTestAddEvent.addEventListener("mouseover", function() { eleTxtAddEvent.innerHTML = '经过人家啦!'; }); eleTestAddEvent.addEventListener("mouseout", function() { eleTxtAddEvent.innerHTML = '不要离开人家嘛!'; }); }
移除注册的事件。
target.removeEventListener(type, listener[, useCapture])
type
表示要移除的事件类型。listener
表示要移除的事件方法。useCapture
可选参数。要移除的事件是不是可以捕获的。此参数在本项目中没有作用,可忽略。暂无
这个例子是这样的:
两个按钮,第一个按钮注册了两个方法,一个是图片尺寸变化,另外一个是图片位置随机变化。点击第二个按钮则移除“位置变化”这个注册事件。此时,再点击第一个按钮,看看效果如何?
HTML
<img src="mm1.jpg" id="bingoRemoveEvent">
JS
var eleAddEventAB = document.querySelector("#testAddEventAB") , eleRemoveEventB = document.querySelector("#testRemoveEventB"); var eleBingoRemoveEvent = document.querySelector("#bingoRemoveEvent"); if (eleAddEventAB && eleRemoveEventB && eleBingoRemoveEvent) { var eventAddA = function() { // 大小随机 eleBingoRemoveEvent.style.width = Math.ceil(128 * Math.random()) + "px"; }, eventAddB = function() { // 位置随机 eleBingoRemoveEvent.style.marginLeft = Math.ceil(128 * Math.random()) + "px"; }; // 注册事件 eleAddEventAB.addEventListener("click", eventAddA); eleAddEventAB.addEventListener("click", eventAddB); // 移除事件 eleRemoveEventB.addEventListener("click", function() { eleAddEventAB.removeEventListener("click", eventAddB); this.value += "√"; }); }
给DOM节点委派一个事件。
element.dispatchEvent(event);
event
表示事件对象。在标准浏览器中,由document.createEvent创建。不过这其实属于旧方法,目前,推荐使用new Event()
. 但IE9似乎不支持新的用法,因此,本项目依然使用的是document.createEvent
.引入dispatchEvent
的初衷是触发各类事件。类似jQuery中的trigger
方法。
dispatchEvent
要想起作用,前面还需要两步,一是创建,二是初始化。具体可参考下面的示例代码。
在IE6~IE9中,参数event
对象(如果是采用document.createEvent
创建)有用的属性值有:
event.target
事件元素event.type
事件类型event.timeStamp
事件执行时候的时间戳其他参数实际上只是个占位子的摆设。因此,dispatchEvent
更适合自定义事件或者不依赖event
事件对象的事件。
创建一个基本的自定义事件,实现图片随机左边距(margin-left
)效果。如下代码:
// 创建 var eventMarginLeft = document.createEvent("Event"); var eleDispatch = document.querySelector("#bingoDispatch"); if (eleDispatch) { eleDispatch.addEventListener("marginLeft", function() { this.style.marginLeft = Math.round(Math.random() * 100) + "px"; }); // 初始化 eventMarginLeft.initEvent("marginLeft"); }
HTML
<img src="mm1.jpg" id="bingoDispatch">
JS
var eventMarginLeft = document.createEvent("Event"); var eleDispatch = document.querySelector("#bingoDispatch"); if (eleDispatch) { eleDispatch.addEventListener("marginLeft", function() { this.style.marginLeft = Math.round(Math.random() * 100) + "px"; }); eventMarginLeft.initEvent("marginLeft"); } var eleTestDispatch = document.querySelector("#testDispatchEvent"); if (eleTestDispatch) eleTestDispatch.addEventListener("click", function() { eleDispatch.dispatchEvent(eventMarginLeft); });
创建指定类型的事件。
var event = document.createEvent(type);
type
表示事件的类别。本项目支持如下值:"Event"
, "HTMLEvents"
, "MouseEvents"
, "UIEvents"
. 并不支持DOM 3 "TextEvent"
, HTMLEvent
, MouseEvent
, KeyboardEvent
等其他类别,否则在IE6~8浏览器下会抛出异常。实际上,在IE6~8浏览器中,type
类别实际并没有多少实际的差异。不过,从兼容统一角度讲,还是根据情况使用合适的类别。
参考*.dispatchEvent中的示例。
暂无
初始化document.createEvent
返回事件。 // 作者自述: 这一连串使用其实很啰嗦,在新的构造器事件生成中,已经没有这个啰嗦的初始化步骤。
event.initEvent(eventType, canBubble, cancelable);
event.initMouseEvent(eventType, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget);
event.initUIEvent(eventType, canBubble, cancelable, view, detail);
eventType
表示事件的类型,例如"click"
或者自定义注册的事件类型,如"marginLeft"
.canBubble
可选参数。表示事件是否冒泡。默认为false
.cancelable
可选参数。表示是否可以用preventDefault()
方法取消事件,默认为false
.view
可选参数。表示...event
对象各个属性含义请大家自行查找相关资料。以上初始化方法的参数可以通过addEventListener
注册事件的event
对象获得,于是,通过这个,我们可以区分是主动触发行为(鼠标点击)还是代码触发行为(dispatchEvent
)。
document.createEvent
, event.initEvent
, element.disptachEvent
. 实际是触发addEventListener
注册事件的三步曲。
于是,element
元素上注册的click
事件就可以被执行了。行为表现有些类似jQuery中的trigger
.
这里的对象初始化方法与事件类别是一一对应的,如下:
Event | initEvent |
HTMLEvents | initEvent |
MouseEvents | initMouseEvent |
UIEvents | initUIEvent |
其他一些事件类别,如TextEvent
为DOM3级别,这里不予以支持。
HTML
<img src="mm1.jpg" id="bingoInitEvent">
JS
var eleClickAdded = document.querySelector("#testClickAdded") eleClickDispatch = document.querySelector("#testClickDispatch"); var eleBingoInitEvent = document.querySelector("#bingoInitEvent"); if (eleClickAdded && eleClickDispatch && eleBingoInitEvent) { eleClickAdded.addEventListener("click", function() { eleBingoInitEvent.style.marginLeft = Math.ceil(100 * Math.random()) + "px"; }); // 创建 var initEventCreate = document.createEvent("MouseEvents"); // 初始化 initEventCreate.initMouseEvent("click"); // 点击触发 eleClickDispatch.addEventListener("click", function() { eleClickAdded.dispatchEvent(initEventCreate); }); }
表示表单元素的输入事件。此事件为HTML5新增。
element.addEventListener("input", fn);
比方说Autocomplete这些组件效果,需要侦听用户的输入行为。传统方法为侦听keydown
或keyup
等键盘事件,但存在一个问题,就是用户鼠标右键粘贴内容的时候是无法捕获的。还需要再做额外的处理,这人力成本显然上升了。
input
事件专为这种情况诞生。只要输入框里面有内容输入,才会执行响应的事件。性能更高,适应性更好。
还可以输入140字:
还可以输入<span id="inputLeftText">140</span>字: <textarea id="areaTextInput" cols="50" rows="5" placeholder="别愣着,赶快输入内容..."></textarea>
JS
var eleAreaInput = document.querySelector("#areaTextInput") , eleNumLeftInput = document.querySelector("#inputLeftText"); if (eleAreaInput && eleNumLeftInput) { eleAreaInput.addEventListener("input", function() { var left = 140 - this.value.trim().length; if (left < 10) { eleNumLeftInput.style.color = "#cd0000"; } else { eleNumLeftInput.style.color = ""; } eleNumLeftInput.innerHTML = left; }); }
url地址hash改变时候触发。
window.onhashchange = function(event) {
// 该干嘛干嘛嘛
};
event
对象的参数如下:
target
表示浏览器上下文(window
).type
表示事件类型。oldURL
表示之前的URL地址。newURL
当前的URL地址。IE6-IE8浏览器下,不支持window.addEventListener("hashchange", fn)
的用法。
IE8浏览器下,原本不支持oldURL
和newURL
. 这里做了重置处理,也是支持这两个参数。不过恕我水平有限,还需要做一个额外的小处理。就是在事件的最上面加上,以阻止默认支持的方法执行:
event = event || {};
或者:
if (!event) return;
点击下面三个文字链接:
你的意思是我会变色?
HTML
<a href="#red" class="link">变红色</a> <a href="#blue" class="link">变蓝色</a> <a href="#yellow" class="link">变黄色</a> <span id="hashChangeColor">你的意思是我会变色?</span>
JS
var eleHashChange = document.querySelector("#hashChangeColor"); if (eleHashChange) { var hashKeyColor = { red: "红色", blue: "绿色", yellow: "黄色" }; window.onhashchange = function(event) { // for IE8 event = event || {}; // for all var oldUrl = event.oldURL, newUrl = event.newURL; var hashOld = '', hashNew = ''; if (oldUrl && newUrl) { hashOld = oldUrl.split("#")[1] || ''; hashNew = newUrl.split("#")[1] || ''; // 颜色变化 eleHashChange.style.color = hashKeyColor[hashNew]? hashNew: ''; // 变化日志 eleHashChange.insertAdjacentHTML("beforeEnd", '<br><span style="color: #666;">颜色从' + (hashKeyColor[hashOld] || '继承色') + '变成' + (hashKeyColor[hashNew] || '继承色;</span>') ); } }; }
返回元素包含的CSS属性以及对应的属性值。
var style = window.getComputedStyle(element[, pseudoElt]);
element
表示DOM元素。pseudoElt
表示伪类。不过这里并不支持。包括IE9浏览器。要想得到特性属性的CSS值,有两种方式:
backgroundColor
, 而不能是background-color
. 如下代码:
var bgColor = style.backgroundColor;
不能直接使用"float"
属性获得浮动值。需要使用styleFloat
:
var valueFloat = window.getComputedStyle(element)["styleFloat"];
getPropertyValue
方法获取。
var cssValue = style.getPropertyValue(cssKey);
getPropertyValue
获取有两个好处。一是支持短横连接符的写法,如"background-color"
; 二是可以直接使用float
属性。
更多知识点可参考我的“获取元素CSS值之getComputedStyle方法熟悉”这篇文章。
HTML
<form id="formGetCssValue"> <p>你想知道下图的哪个CSS属性值?</p> <p> <img src="mm1.jpg" id="bingoGetCss"> </p> <p><input id="inputCssValue" size="20" value="float" placeholder="输入CSS属性名称" required pattern="^[a-zA-Z]+(?:\-[a-zA-Z]+)?$"></p> <p><input type="submit" class="button" value="出现吧~"></p> <p id="resultCssValue">您输入的属性<code>$key$</code>对应的值是<code>$value$</code>.</p> </form>
JS
var eleFormGetCss = document.querySelector("#formGetCssValue") , eleBingoGetCss = document.querySelector("#bingoGetCss") , eleInputCssValue = document.querySelector("#inputCssValue") , eleResultCssValue = document.querySelector("#resultCssValue"); var initHtmlResult = ''; if (eleFormGetCss && eleBingoGetCss && eleInputCssValue && eleResultCssValue) { initHtmlResult = eleResultCssValue.innerHTML; eleResultCssValue.innerHTML = ' '; eleFormGetCss.addEventListener("submit", function(event) { var key = eleInputCssValue.value; var value = window.getComputedStyle(eleBingoGetCss).getPropertyValue(key) + ""; eleResultCssValue.innerHTML = initHtmlResult.replace("$key$", key).replace("$value$", value); event.preventDefault(); }); }
将JavaScript对象表示法(JSON)字符串转换为对象。
JSON.parse(text[, reviver])
text
表示要解析的JSON字符串。reviver
可选。如果是一个转换结果的函数,将为对象的每个成员调用此函数。如果成员包含嵌套对象,则先于父对象转换嵌套对象。对于每个成员,会发生以下情况:reviver
返回一个有效值,则成员值将替换为转换后的值。reviver
返回它接收的相同值,则不修改成员值。reviver
返回null
或undefined
, 则删除成员。返回一个对象或数组。
如果此函数引发JavaScript分析器错误(如“SCRIPT1014:无效字符”),则输入文本将不遵循JSON语法。 若要更正此错误,请执行下列操作之一:
修改text
参数以遵循JSON语法。有关更多信息,请参见JSON对象的BNF syntax notation(BNF语法表示法)。
try { JSON.parse('{}'); // {} JSON.parse('true'); // true JSON.parse('"foo"'); // "foo" JSON.parse('[1, 5, "false"]'); // [1, 5, "false"] JSON.parse('null'); // null } catch (e) { console.error("Parsing error:", e); }
var jsontext = '{"firstname":"Jesper","surname":"Aaberg","phone":["555-0100","555-0120"]}';
var contact = JSON.parse(jsontext);
document.write(contact.surname + ", " + contact.firstname);
// 输出: Aaberg, Jesper
将JavaScript值转换为JavaScript对象表示法(Json)字符串。
JSON.stringify(value [, replacer] [, space])
value
表示要转换的JavaScript值(通常为对象或数组)。replacer
可选。表示转换结果的函数或数组。
replacer
为一个函数,则JSON.stringify
会调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回undefined
, 则排除成员。根对象的键是一个空字符串:""
.replacer
为一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。当value
参数也为数组时,将忽略replacer
数组。space
可选。表示向返回值JSON文本添加缩进、空白和换行符以使其更易于读取。
space
,则将生成返回值文本,而没有任何额外空白。space
为一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果space
大于10
, 则文本缩进10
个空格。space
是非空字符串(例如"\t"
),则返回值文本在每个级别中缩进字符串中的字符数。space
是长度大于10
个字符的字符串,则使用前10
个字符。返回值为一个包含JSON文本的字符串。
目前,本项目中,JSON.parse
和JSON.stringify
两个方法都源自开源项目:https://github.com/douglascrockford/JSON-js/blob/master/json2.js.
assert(JSON.stringify({}) === '{}');
assert(JSON.stringify(true) === 'true');
assert(JSON.stringify("foo") === '"foo"');
assert(JSON.stringify([1, "false", false]) === '[1,"false",false]');
assert(JSON.stringify({ x: 5 }) === '{"x":5}');
JSON.stringify({x: 5, y: 6}); // '{"x":5,"y":6}' or '{"y":6,"x":5}'
根据指定的原型对象和属性创建新的对象。
Object.create(proto [, propertiesObject ])
proto
表示新创建对象的原型。propertiesObject
可选参数。表示一个对象值,可以包含若干个属性,属性名为新建对象的属性名,属性值为那个属性的属性描述符对象。如果proto
参数的值不是null
或者对象,则会抛出TypeError
异常。
可参考MDN: Object.create().
返回对象可枚举的属性集合数组。
Object.keys(obj)
obj
表示用来枚举属性的对象。只能返回被枚举的属性关键字。ES5中还有个Object.getOwnPropertyNames方法,也是IE9+支持,包括不可枚举的属性也可以返回。这个貌似不太好做兼容处理,因此,只有这里的Object.keys()
.
下面示例代码来自MDN,注释有翻译:
var arr = ["a", "b", "c"]; alert(Object.keys(arr)); // 弹出 "0,1,2" // 类数组对象 var obj = { 0 : "a", 1 : "b", 2 : "c"}; alert(Object.keys(obj)); // 弹出 "0,1,2" // 类数组对象,关键字顺序随机 var an_obj = { 100: "a", 2: "b", 7: "c"}; alert(Object.keys(an_obj)); // 弹出 "2, 7, 100" // getFoo是个不可枚举的属性 var my_obj = Object.create({}, { getFoo : { value : function () { return this.foo } } }); my_obj.foo = 1; alert(Object.keys(my_obj)); // 仅会弹出foo
获取当前的时间戳。
Date.now()
暂无
JS
var eleTestDateNow = document.querySelector("#testDateNow") , eleTextDateNow = document.querySelector("#textDateNow"); if (eleTestDateNow && eleTextDateNow) { eleTestDateNow.addEventListener("click", function() { eleTextDateNow.innerHTML = Date.now(); }); }
改变函数的执行上下文,以及参数传递。
fun.bind(thisArg[, arg1[, arg2[, ...]]])
thisArg
表示fun
执行时候其中的this
指向。arg1, arg2, ...
表示阿公阿婆,兄弟姐妹...参数。别看这里介绍少,这个方法非常实用,也非常常用。您有兴趣可以查看我之前写的“ECMAScript 5中bind方法、自定义及小拓展”一文娱乐下!
暂无
去除字符串首尾空格。
String.trim()
耳熟能详,司空见惯。
(" haha ").trim(); // "haha"
检测对象是否是数组。
Array.isArray(obj);
obj
表示试炼的对象。返回Boolean值。
Array.isArray([]); // true
遍历数组
[].forEach(function(value, index, array) {
// ...
});
value
表示遍历的数组的值。index
表示索引。array
表示数组本身。具体使用和一些说明可参考我的之前的文章“ES5中新增的Array方法详细说明”。内有诸多源代码示例,还有demo页面。
数组“映射”
[].map(function(value, index, array) {
// ...
});
value
表示遍历的数组的值。index
表示索引。array
表示数组本身。具体使用和一些说明可参考我的之前的文章“ES5中新增的Array方法详细说明”。内有诸多源代码示例,还有demo页面。
var data = [1, 2, 3, 4];
var arrayOfSquares = data.map(function (item) {
return item * item;
});
alert(arrayOfSquares); // 1, 4, 9, 16
数组“过滤”
[].filter(function(value, index, array) {
// ...
});
value
表示遍历的数组的值。index
表示索引。array
表示数组本身。根据function
返回的是true
还是false
过滤原数组返回新数组。
具体使用和一些说明可参考我的之前的文章“ES5中新增的Array方法详细说明”。内有诸多源代码示例,还有demo页面。
var data = [0, 1, 2, 3];
var arrayFilter = data.filter(function(item) {
return item;
});
console.log(arrayFilter); // [1, 2, 3]
是否“某些项”合乎条件。返回Boolean值。
[].some(function(value, index, array) {
// ...
});
value
表示遍历的数组的值。index
表示索引。array
表示数组本身。具体使用和一些说明可参考我的之前的文章“ES5中新增的Array方法详细说明”。内有诸多源代码示例,还有demo页面。
是否“所有项”合乎条件。返回Boolean值。
[].every(function(value, index, array) {
// ...
});
value
表示遍历的数组的值。index
表示索引。array
表示数组本身。具体使用和一些说明可参考我的之前的文章“ES5中新增的Array方法详细说明”。内有诸多源代码示例,还有demo页面。
匹配元素在数组中的索引位置。如果没有匹配项,返回-1
.
array.indexOf(searchElement[, fromIndex])
searchElement
表示要匹配的对象。fromIndex
表示起始的索引位置。可缺省,表示从0
开始。具体使用和一些说明可参考我的之前的文章“ES5中新增的Array方法详细说明”。内有诸多源代码示例,还有demo页面。
var data = [2, 5, 7, 3, 5]; console.log(data.indexOf(5, "x")); // 1 ("x"被忽略) console.log(data.indexOf(5, "3")); // 4 (从3号位开始搜索) console.log(data.indexOf(4)); // -1 (未找到) console.log(data.indexOf("5")); // -1 (未找到,因为5 !== "5")
lastIndexOf
方法与indexOf
方法类似。只是lastIndexOf
是从字符串的末尾开始查找,而不是从开头。还有一个不同就是fromIndex
的默认值是array.length - 1
而不是0
.
array.lastIndexOf(searchElement[, fromIndex])
searchElement
表示要匹配的对象。fromIndex
表示起始的索引位置。可缺省,表示从array.length - 1
开始。具体使用和一些说明可参考我的之前的文章“ES5中新增的Array方法详细说明”。内有诸多源代码示例,还有demo页面。
var data = [2, 5, 7, 3, 5]; console.log(data.lastIndexOf(5)); // 4 console.log(data.lastIndexOf(5, 3)); // 1 (从后往前,索引值小于3的开始搜索) console.log(data.lastIndexOf(4)); // -1 (未找到)
中文意思为“减少”、“约简”。不过,从功能来看,我个人是无法与“减少”这种含义联系起来的,反而更接近于“迭代”、“递归(recursion)”。
array.reduce(callback[, initialValue])
callback
支持下面4个参数:
previous
表示之前值。current
表示当前值。index
表示索引。array
表示数组本身。initialValue
参数可选。表示初始值。若指定,则当作最初使用的previous
值;如果缺省,则使用数组的第一个元素作为previous
初始值,同时current
往后排一位,相比有initialValue
值少一次迭代。如果您尚未明白该API的使用,可参考我的之前的文章“ES5中新增的Array方法详细说明”。内有诸多源代码示例,还有demo页面。
reduceRight
跟reduce
相比,用法类似。实现上差异在于reduceRight
是从数组的末尾开始实现。
array.reduceRight(callback[, initialValue])
callback
支持下面4个参数:
previous
表示之前值。current
表示当前值。index
表示索引。array
表示数组本身。initialValue
参数可选。表示初始值。若指定,则当作最初使用的previous
值;如果缺省,则使用数组的第一个元素作为previous
初始值,同时current
往后排一位,相比有initialValue
值少一次迭代。具体使用和一些说明可参考我的之前的文章“ES5中新增的Array方法详细说明”。内有诸多源代码示例,还有demo页面。