Array.prototype 的泛型应用分析


Posted in Javascript onApril 30, 2010

题目
请说明下面语句的输出:

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 方法,很多浏览器原生对象的方法都是泛型,我们完全可以利用这 这些特性使代码更为的清晰
使用原生方法,效率更高。

Javascript 相关文章推荐
javascript中eval函数用法分析
Apr 25 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
Sep 22 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
Oct 09 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
Aug 31 Javascript
Bootstrap使用基础教程详解
Sep 05 Javascript
微信小程序 chooseImage选择图片或者拍照
Apr 07 Javascript
使用jQuery和ajax代替iframe的方法(详解)
Apr 12 jQuery
Node.js对MongoDB数据库实现模糊查询的方法
May 03 Javascript
微信小程序列表时间戳转换实现过程解析
Oct 12 Javascript
react基本安装与测试示例
Apr 27 Javascript
Vue实现随机验证码功能
Dec 29 Vue.js
jQuery 锚点跳转滚动条平滑滚动一句话代码
Apr 30 #Javascript
JavaScipt中的Math.ceil() 、Math.floor() 、Math.round() 三个函数的理解
Apr 29 #Javascript
匹配任意字符的正则表达式写法
Apr 29 #Javascript
jquery ajax提交表单数据的两种实现方法
Apr 29 #Javascript
jQuery 动画弹出窗体支持多种展现方式
Apr 29 #Javascript
jQuery 工具函数学习资料
Apr 29 #Javascript
IE JS无提示关闭窗口不提示的方法
Apr 29 #Javascript
You might like
2019年漫画销量排行榜:鬼灭登顶 海贼单卷制霸 尾田盛赞鬼灭
2020/03/08 日漫
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
javascript 主动派发事件总结
2011/08/09 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
javascript动态创建表格及添加数据实例详解
2015/05/13 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
详解如何实现一个简单的Node.js脚手架
2017/12/04 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
跟老齐学Python之再深点,更懂list
2014/09/20 Python
pymongo为mongodb数据库添加索引的方法
2015/05/11 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
python ---lambda匿名函数介绍
2019/03/13 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
求职信的要素有哪些呢
2013/12/26 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
信用卡工资证明范本
2015/06/19 职场文书
python源码剖析之PyObject详解
2021/05/18 Python