原文: 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的方法相关推荐

  1. JavaScript中的Array对象方法调用

    方法concat for  循环与for in 循环 <html> <head> <script type="text/javascript"> ...

  2. c++ 数组截取_【学习教程】JavaScript中原生Array数组方法详解

    来源 | http://www.fly63.com/article/detial/9692 JS中,数组可以通过阵列构造函数或[]字面量的方式创建.数组是一个特殊的对象,继承自对象原型,但用typeo ...

  3. JavaScript中原生Array数组方法详解

    JS中,数组可以通过阵列构造函数或[]字面量的方式创建.数组是一个特殊的对象,继承自对象原型,但用typeof运算判断时,并没有一个特定的值,仍然返回'对象'.但使用[] instanceof Arr ...

  4. 扩展JavaScript数组(Array)添加删除元素方法

    为JavaScript数组(Array)扩展 添加删除元素方法 作者:jcLee95:https://blog.csdn.net/qq_28550263?spm=1001.2101.3001.5343 ...

  5. 【JavaScript面试】isArray() 、Array.of()、Array.from() 方法

    isArray() 定义和用法 isArray() 方法用于判断一个对象是否为数组. 如果对象是数组返回 true,否则返回 false. 语法 Array.isArray(obj) 参数 objec ...

  6. JavaScript Array reverse 方法:颠倒数组中元素的顺序

    在JavaScript中,Array对象的reverse()方法将颠倒(反转)数组中元素的顺序.arr.reverse()在原数组上实现这一功能,即,reverse()会改变原数组. 例1:将数组元素 ...

  7. PHP中把stdClass Object转array的几个方法

    2019独角兽企业重金招聘Python工程师标准>>> 方法一: //PHP stdClass Object转array function object_array($array) ...

  8. Array 的方法们 和 object 那些让人纠结的问题 ......

    昨天 一个朋友 问了这样一个问题.  本来类似的代码测试,以前做过好多... 但发现当我试图从根源上找出原因的时候,却有些无所适从. 特记录下来,待以后求证. 简单的问题 : var con = fu ...

  9. php 对象object json,PHP对象转数组(Object转Array),Json转数组(Json转Array)的方法_PHP教程...

    PHP对象转数组(Object转Array),Json转数组(Json转Array)的方法 (1)php对象转数组的方法(object 转 array): /** * object 转 array * ...

  10. javascript中的array对象属性及方法

    Array 对象 Array 对象用于在单个的变量中存储多个值. 创建 Array 对象的语法: new Array(); new Array(size); new Array(element0, e ...

最新文章

  1. 线段树 ---- CF1004F Sonya and Bitwise OR(线段树上分治合并区间信息 + or 前缀和的log性质)
  2. 神经网络是存储了海量的信息还是将海量的关系映射存储在了一起(发挥了存储记忆功能),还是变成了看似是一个公式,实际是成千上万个规律的公式融合在一个式子中( 类似于正弦波的傅里叶分解成无限中频率的波的加和
  3. 浅谈Java的输入输出流
  4. hdu 2459 (后缀数组+RMQ)
  5. Reducing the Dimensionality of Data with Neural Networks:神经网络用于降维
  6. 黑旋风简约引导页源码-个人官网必备
  7. TensorFlow YOLO3
  8. yytextview 复制_用YYTextView 实现填空题作答功能
  9. Android开发笔记(七十五)内存泄漏的处理
  10. SpringBoot从入门到进阶——学会Logback日志的配置和搭建
  11. mPaSS小程序 路由跳转
  12. ctf是用Windows还是Linux,CTF中zip总结
  13. dep指定版本 go_将 dep 更换为 go mod
  14. Python dummy variable
  15. nginx压缩静态文件
  16. Tableau中的LOOKUP函数
  17. 神经科学界大地震!诺奖级泰斗将携团队移居中国,与蒲慕明院士强强联手
  18. Android进阶之路 - 仿京东地址选择器使用指南
  19. Cased by: java.lang.ClassNotFoundException: com.google.common.util.concurrent.SettableFuture
  20. Gate 7.2的学习笔记(一)

热门文章

  1. this指针常识性问题
  2. 代码修改以及公式推导
  3. 矩阵论10,11,12作业
  4. java线程期末考试_mooc课程 java 期末考试试卷
  5. vscode 头文件包含问题_VScode编译C++ 头文件显示not found的问题
  6. Hadoop中的一些基本操作
  7. cs231n学习(1)图像分类器:KNN和线性分类器(上)
  8. SQL Server数据库的查询语句
  9. python dynamic array
  10. 清除localstorage