Array.prototype 的泛型应用分析

 更新时间:2010年04月30日 15:11:57   作者:  
Array.prototype 的泛型应用分析,需要的朋友可以参考下。
题目
请说明下面语句的输出:
复制代码 代码如下:

x = {shift:[].shift};
x.shift();
console.info(x.length);

如果你回答正确,那么说明你已经了解 Array 函数的泛型应用。在理解这到题目之前,我 我们首先要了解数组(Array)的 shift 定义。

MDC 中已经对相关的说明描述得非常的清楚
复制代码 代码如下:

shift is intentionally generic; this method can be called or
applied to objects resembling arrays. Objects which do not
contain a length property reflecting the last in a series of
consecutive, zero-based numerical properties may not behave
in any meaningful manner.

同时,EMCAScript 中的定义也同时定义了对于 shift 操作对于对象 length 属性的改变, 那么基本上我们可以了解到上题中的答案为
复制代码 代码如下:
0

扩散思维
如果对于上面的题目还无法理解,那么我们更清楚的说明 Array.prototype.shift 对对象 的 length 的影响。
复制代码 代码如下:

x = {};
Array.prototype.shift.call(x);
console.info(x.length);

很明显,对于对象如果为定义 length 属性,则 shift 则会自动加上 length 属性并设置 为 0 。

既然已经说到这里,那么下面的题目输出什么留给大家去思考。
复制代码 代码如下:

x = function (a, b, c) {};
Array.prototype.shift.call(x);
console.info(x.length);

重新认识泛型
很明显,上面的题目有可能还是无法说明本篇文章的题目。泛型(Generic)应用其实 期前也说明过,但这里主要说明 Array 方法对于“类数组”的操作使用。

强制转换为数组
复制代码 代码如下:

var args = Array.prototype.slice.call(arguments);

这个用法比较火星,其实期前也用过,详细参见这里。

迭代数据
复制代码 代码如下:

Array.prototype.forEach.call(arguments, function(i) {
console.info(i);
});

如果对象能够被递归,则出了“传统”的 for、while 等语句以外,还可以考虑使用 Array 的 forEach 属性(注意 IE 会是悲剧)。Array 的 forEach 方法详见这里。

其他的 Array 扩展用法可以散发自己的思维,如果对应浏览器的 Array 没有对应的实现方 法,可以参见这里。

其实,不仅仅是 Array 方法,很多浏览器原生对象的方法都是泛型,我们完全可以利用这 这些特性使代码更为的清晰
使用原生方法,效率更高。

相关文章

  • js加入收藏以及使用Jquery更改透明度

    js加入收藏以及使用Jquery更改透明度

    本文为大家提供一段加入收藏的js代码以及实用Jquery更改对象透明度的代码,需要的朋友可以参考下
    2014-01-01
  • JS简单判断滚动条的滚动方向实现方法

    JS简单判断滚动条的滚动方向实现方法

    这篇文章主要介绍了JS简单判断滚动条的滚动方向实现方法,涉及javascript针对scrollTop事件的相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • 基于JS实现步骤引导进度条效果的代码示例

    基于JS实现步骤引导进度条效果的代码示例

    在Web前端开发中,步骤引导进度条是一种常见的交互设计,用于引导用户完成多步骤任务,如表单填写、注册流程或支付操作,本文将详细介绍如何利用JavaScript实现一个功能完善且视觉友好的步骤引导进度条效果,需要的朋友可以参考下
    2025-02-02
  • JS中map与forEach无法跳出循环及every和some的使用

    JS中map与forEach无法跳出循环及every和some的使用

    在我们平时使用习惯中,for循环里要跳出整个循环是使用break,但在数组中用forEach循环或者map如要退出整个循环使用break会报错,使用return也不能跳出循环,下面这篇文章主要介绍了关于JS中map与forEach无法跳出循环及every和some的使用的相关资料,需要的朋友可以参考下
    2023-05-05
  • JS代码实现电脑配置检测功能

    JS代码实现电脑配置检测功能

    这篇文章主要介绍了JS代码实现电脑配置检测功能,需要的朋友可以参考下
    2018-03-03
  • 微信小程序中显示倒计时代码实例

    微信小程序中显示倒计时代码实例

    这篇文章主要介绍了微信小程序中显示倒计时,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • JS使用post提交的两种方式

    JS使用post提交的两种方式

    这篇文章主要介绍了JS使用post提交的两种方式,实例分析了两种JavaScript使用post提交的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-12-12
  • 如何基于webRTC实现人脸识别功能

    如何基于webRTC实现人脸识别功能

    WebRTC技术包含了音视频编解码技术、传输技术、流媒体服务器技术等,涵盖了音视频处理和传输的方方面面,下面这篇文章主要给大家介绍了关于如何基于webRTC实现人脸识别的相关资料,需要的朋友可以参考下
    2022-12-12
  • jquery单行文字向上滚动效果的实现代码

    jquery单行文字向上滚动效果的实现代码

    这篇文章主要介绍了jquery单行文字向上滚动效果的具体实现,此效果适应于很多场景,会的不会的都要学习下啊
    2014-09-09
  • layer弹出层 iframe层去掉滚动条的实例代码

    layer弹出层 iframe层去掉滚动条的实例代码

    今天小编就为大家分享一篇layer弹出层 iframe层去掉滚动条的实例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08

最新评论