jQuery.merge 源码阅读

jQuery.merge(first,second)

概述

  • 合并两个数组

    返回的结果会修改第一个数组的内容——第一个数组的元素后面跟着第二个数组的元素。

参数

  • first:第一个待处理数组,会改变其中的元素。
    second:第二个待处理数组,不会改变其中的元素。

示例

  • $.merge( [0,1,2], [2,3,4] )
  • $.merge( {name:‘andrew‘,age:‘23‘}, [2,3,4] )  //看看会如何

结果

  • [0,1,2,2,3,4]
  • {name: "Andrew", age: "23", NaN: 3, length: NaN}

源码阅读

 1 function (first, second) {
 2     var l = second.length,
 3         i = first.length,
 4         j = 0;
 5
 6     if (typeof l === "number") {
 7         for (; j < l; j++) {
 8             first[i++] = second[j];
 9         }
10
11     } else {
12         while (second[j] !== undefined) {
13             first[i++] = second[j++];
14         }
15     }
16
17     first.length = i;
18
19     return first;
20 }

解读

javascript松散的类型结构使得对数组的操作会比较优雅,数组不会越界,不用担心数组长度的问题,仅仅需要对传入类型进行判断。

如果传入是key-value的对象,length会返回undefined,按下标取也会返回undefined。读者可以想想为什么第二个merge会返回这样的结果?

如果传入的是数组的对象,length会正常返回。

时间: 2025-01-07 13:32:25

jQuery.merge 源码阅读的相关文章

OpenJDK 源码阅读之 TimSort

概要 这个类在 Oracle 的官方文档里是查不到的,但是确实在 OpenJDK 的源代码里出现了,Arrays 中的 sort 函数用到了这个用于排序的类.它将归并排序(merge sort) 与插入排序(insertion sort) 结合,并进行了一些优化.对于已经部分排序的数组,时间复杂度远低于 O(n log(n)),最好可达 O(n),对于随机排序的数组,时间复杂度为 O(nlog(n)),平均时间复杂度 O(nlog(n)).强烈建议在看此文前观看 Youtube 上的 可视化Ti

OpenJDK 源码阅读之 Arrays

概要 类继承关系 java.lang.Object java.util.Arrays 定义 public class Arrays extends Object 要点 此类主要是提供了一些操作数组的方法,比如排序啊,搜索啊.也提供一个工厂,用于将数组当成一个 List. 实现 quick sort public static void sort(int[] a) { DualPivotQuicksort.sort(a); } sort 使用了 util 中的另一个类中的方法,DualPivotQ

【深入浅出jQuery】源码浅析2--奇技淫巧

最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐进增强)优雅的处理能力以及 Ajax 等方面周到而强大的定制功能无不令人惊叹. 另外,阅读源码让我接触到了大量底层的知识.对原生JS .框架设计.代码优化有了全新的认识,接下来将会写一系列关于 jQuery 解析的文章. 我在 github 上关于 jQuery 源码的全文注解,感兴趣的可以围观一下

javascript源码阅读推荐

学习任何程序设计语言,看书都只是开始的一小步而已,多看别人写的代码,自己动手多写代码才能让自己更上一层楼.Javascript的语言使用更是如此,由于javascript运行环境是浏览器,长久以来JavaScript兼容性一直是web开发者的一个主要问题.在正式规范.事实标准以及各种实现之间的存在的差异让许多开发者日夜煎熬.其结果就是很多网页不能在各种浏览器上都有一样的表现,甚至根本不能跨浏览器.但基本上都遵循ECMA-262.努力并坚持一定会提高的.来自http://furzoom.com/j

Nutch源码阅读进程3---fetch

走了一遍Inject和Generate,基本了解了nutch在执行爬取前的一些前期预热工作,包括url的过滤.规则化.分值计算以及其与mapreduce的联系紧密性等,自我感觉nutch的整个流程是很缜密的,起码从前面两个过程看是这样的. 前期回顾:上一期主要是讲解了nutch的第二个环节Generate,该环节主要完成获取将要抓取的url列表,并写入到segments目录下,其中一些细节的处理包括每个job提交前的输入输出以及执行的map和reducer类具体做了那些工作都可以参考上一篇.接下

jQuery方法源码解析--jQuery($)方法(一)

jQuery方法源码解析--jQuery($)方法 注: 1.本文分析的代码为jQuery.1.11.1版本,在官网上下载未压缩版即可 2.转载请注明出处 jQuery方法: 这个方法大家都不陌生,在使用过程中,它还有另外一个名字,美元符号:$,$(...)其实就是jQuery(...); 它有很多种用法,通常都返回一个jquery对象,也可以作为$(document).ready(...);的简写形式,分析之前先看一下jQuery都有什么用法. 1.jQuery( selector [, co

jQuery选择器源码分析和easyui核心分析

写在选择器源码分析之前 这里指对1.7.2版本的源码分析,更高版本添加了更多代码. 整个jQuery的代码是写在一个(function(window, undefined){})(window);这样一个闭包里.请思考,为什么要这样做? 将其写在一个闭包函数里,并传入window直接运行的好处有三: 1,统一命名空间,防止变量的污染:  2,将window作为参数传入函数,在函数里调用window的时候,就不用再去找外层的对象,可以提高效率 : 3,undefined并不是javascript的

HTTP请求库——axios源码阅读与分析

概述 在前端开发过程中,我们经常会遇到需要发送异步请求的情况.而使用一个功能齐全,接口完善的HTTP请求库,能够在很大程度上减少我们的开发成本,提高我们的开发效率. axios是一个在近些年来非常火的一个HTTP请求库,目前在GitHub中已经拥有了超过40K的star,受到了各位大佬的推荐. 今天,我们就来看下,axios到底是如何设计的,其中又有哪些值得我们学习的地方.我在写这边文章时,axios的版本为0.18.0.我们就以这个版本的代码为例,来进行具体的源码阅读和分析.当前axios所有

CI框架源码阅读笔记3 全局函数Common.php

从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap引导文件都会最先引入全局函数,以便于之后的处理工作). 打开Common.php中,第一行代码就非常诡异: if ( ! defined('BASEPATH')) exit('No direct script access allowed'); 上一篇(CI框架源码阅读笔记2 一切的入口 index