【转】javascript Object使用Array的方法
原文: http://www.cnblogs.com/idche/archive/2012/03/17/2403894.html
Array.prototype.push
push向数组尾部添加一项并更新length ,返回数组长度。
如果Object使用push会怎样?
看下面代码, obj好像数组一样工作了。length会自动更新。
var push = Array.prototype.push;var obj = {};push.call(obj, "hello"); // 返回值 1// obj {"0":"hello", length:0}push.call(obj, "world"); // 返回值 2// obj {"0":"hello", "1":"world",length:2}
Array.prototype.length Array.prototype.splice
把length和splice 给Object
看下面代码:obj这货居然变成数组了?其实不然这可能是调试工具的一些输出检查问题。
我们用 instanceof 测试 obj instanceof Array //false
var obj = { length:0, splice:Array.prototype.splice};console.log( obj ); // 打印:[]
继续看下面的代码:
obj.push(0)//返回obj.length 1obj.push(1)//返回obj.length 2obj.splice(0, 1);//删除第一项 返回删除项[0]obj.length // 1 splice删除一项的时候同样更新 length属性
这样obj的表现几乎和array一样了。不出意外slice,pop,shift,unshift什么的都可以正常工作在object中。
不过如果直接设置length,在数组中会删除大于length的下表的项, 但里的obj并不不会更新。
应用在哪?
jQuery对象表现像一个array,其实他是一个对象。这种对象如何new出来呢?
实际jQuery把Array的方法借给Object,从而达到这个jQuery对象的效果,jQuery对象内部也直接使用push等Array的方法。
看看jQuery的部分源码 (注意加粗)
// Start with an empty selectorselector: "", // The current version of jQuery being usedjquery: "1.7.1", // The default length of a jQuery object is 0length: 0,...... // For internal use only.// Behaves like an Array's method, not like a jQuery method.push: push,sort: [].sort,splice: [].splice
如果你要把Object玩成Array,那么可能潜在的问题length属性不会和“数组”项总和对应起来。
所以直接使用length设置长度不会得到支持。
看下面jquery代码,虽然length更新了,jquery的对象并没更新。(当然这并不是jquery的问题)
var jq = $('div') //假设我们在页面获取了40个divjq.length // 40jq.length = 0;jq// ? jq中仍然存放了40个dom对象 length属性不会和“数组”项总和对应起来。
Object使用array的方法还能正常工作,实在有些意想不到,可能实际应用远不止这些。
【转】javascript Object使用Array的方法相关推荐
- JavaScript中的Array对象方法调用
方法concat for 循环与for in 循环 <html> <head> <script type="text/javascript"> ...
- c++ 数组截取_【学习教程】JavaScript中原生Array数组方法详解
来源 | http://www.fly63.com/article/detial/9692 JS中,数组可以通过阵列构造函数或[]字面量的方式创建.数组是一个特殊的对象,继承自对象原型,但用typeo ...
- JavaScript中原生Array数组方法详解
JS中,数组可以通过阵列构造函数或[]字面量的方式创建.数组是一个特殊的对象,继承自对象原型,但用typeof运算判断时,并没有一个特定的值,仍然返回'对象'.但使用[] instanceof Arr ...
- 扩展JavaScript数组(Array)添加删除元素方法
为JavaScript数组(Array)扩展 添加删除元素方法 作者:jcLee95:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...
- 【JavaScript面试】isArray() 、Array.of()、Array.from() 方法
isArray() 定义和用法 isArray() 方法用于判断一个对象是否为数组. 如果对象是数组返回 true,否则返回 false. 语法 Array.isArray(obj) 参数 objec ...
- JavaScript Array reverse 方法:颠倒数组中元素的顺序
在JavaScript中,Array对象的reverse()方法将颠倒(反转)数组中元素的顺序.arr.reverse()在原数组上实现这一功能,即,reverse()会改变原数组. 例1:将数组元素 ...
- PHP中把stdClass Object转array的几个方法
2019独角兽企业重金招聘Python工程师标准>>> 方法一: //PHP stdClass Object转array function object_array($array) ...
- Array 的方法们 和 object 那些让人纠结的问题 ......
昨天 一个朋友 问了这样一个问题. 本来类似的代码测试,以前做过好多... 但发现当我试图从根源上找出原因的时候,却有些无所适从. 特记录下来,待以后求证. 简单的问题 : var con = fu ...
- php 对象object json,PHP对象转数组(Object转Array),Json转数组(Json转Array)的方法_PHP教程...
PHP对象转数组(Object转Array),Json转数组(Json转Array)的方法 (1)php对象转数组的方法(object 转 array): /** * object 转 array * ...
- javascript中的array对象属性及方法
Array 对象 Array 对象用于在单个的变量中存储多个值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, e ...
最新文章
- 线段树 ---- CF1004F Sonya and Bitwise OR(线段树上分治合并区间信息 + or 前缀和的log性质)
- 神经网络是存储了海量的信息还是将海量的关系映射存储在了一起(发挥了存储记忆功能),还是变成了看似是一个公式,实际是成千上万个规律的公式融合在一个式子中( 类似于正弦波的傅里叶分解成无限中频率的波的加和
- 浅谈Java的输入输出流
- hdu 2459 (后缀数组+RMQ)
- Reducing the Dimensionality of Data with Neural Networks:神经网络用于降维
- 黑旋风简约引导页源码-个人官网必备
- TensorFlow YOLO3
- yytextview 复制_用YYTextView 实现填空题作答功能
- Android开发笔记(七十五)内存泄漏的处理
- SpringBoot从入门到进阶——学会Logback日志的配置和搭建
- mPaSS小程序 路由跳转
- ctf是用Windows还是Linux,CTF中zip总结
- dep指定版本 go_将 dep 更换为 go mod
- Python dummy variable
- nginx压缩静态文件
- Tableau中的LOOKUP函数
- 神经科学界大地震!诺奖级泰斗将携团队移居中国,与蒲慕明院士强强联手
- Android进阶之路 - 仿京东地址选择器使用指南
- Cased by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.SettableFuture
- Gate 7.2的学习笔记(一)