【问题标题】:jQuery: array zero vs function get zero: [0] vs get(0)jQuery:数组零 vs 函数获取零:[0] vs get(0)
【发布时间】:2011-02-12 01:32:40
【问题描述】:

如果我可以只使用$('#x>div')[1],我有什么理由应该使用$('#x>div').get(1)?有区别吗?

【问题讨论】:

  • 这是一个精确副本,但我没有链接。
  • 这就是我拼出这些词的原因。所以以后通过搜索会更容易找到。只是拼出几个单词以防万一。 @pst

标签: jquery


【解决方案1】:

不,没有区别。 jQuery 将所有 DOM 节点保存在一个数组中。

$().get(1) === $()[1]

--jQuery源码sn-p--

get: function( num ) {
    return num == null ?
        // Return a 'clean' array
        this.toArray() :

        // Return just the object
        ( num < 0 ? this[ this.length + num ] : this[ num ] );
},

如您所见,不带参数的.get() 会将所有节点作为数组返回。这不能用括号来完成。

【讨论】:

    【解决方案2】:

    不,性能是about the same,因为创建 jQuery 对象支配了数组/函数的访问时间:

    Browser      get Ops/sec  array Ops/sec  #tests
    Chrome 9     20,555       22,671         2
    

    【讨论】:

    • huh.. 我希望数组方法更有效,因为您不必通过函数。
    • 哎呀,哦,它是.. 对不起,我在考虑花费的毫秒数,而不是每秒的操作数
    • 您的比较被以下事实所掩盖,即在您的测试中您还进行了相对繁重的操作(创建 jQuery 对象和 DOM 选择)。如果您从测试中删除它们,则差异会很大。 jsperf.com/get-vs-array/2 array: 123,366,553 / get: 4,062,520 所以@George 的预期是绝对正确的。
    • OP 无论如何都在创建一个 jQuery 对象,它支配着性能,所以你需要考虑它。从测试中删除它是不现实的。
    • 更新:在 Chrome 47 中,performance 的差异明显变小了:array: 397,779,318 / get: 343,623,455(这是我的本地结果 - 无法加载其他结果)
    猜你喜欢
    • 1970-01-01
    • 2020-03-11
    • 2011-03-09
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多