作家
登录

javascript object array方法使用详解

作者: 来源:www.28hudong.com 2013-03-30 00:19:04 阅读 我要评论

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 selector selector: "", // The current version of jQuery being used jquery: "1.7.1", // The default length of a jQuery object is 0 length: 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 // 40 jq.length = 0;jq// ? jq中仍然存放了40个dom对象 length属性不会和“数组”项总和对应起来。 Object使用array的方法还能正常工作,实在有些意想不到,可能实际应用远不止这些。

  推荐阅读

  addEventListener和attachEvent二者绑定的执行函数中的this不相同

写 addEventListener 和 attachEvent 区别的博文不少,不过大部分都把重点放置于前者是Firefox chrome,后者只是存在于IE系列中。 最近在写一个事件代理的时候,遇到一个BUG,发现除此外,二者绑定的执行函数中的 >>>详细阅读


本文标题:javascript object array方法使用详解

地址:http://www.17bianji.com/kaifa2/JS/22861.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)