jQuery.makeArray(obj)这个函数从名字上来看非常easy猜出它的用途:应该是用来将传入的对象转换成一个原生array

再看看官网上对它的解释:Convert an array-like object into a true JavaScript array.(将一个类似数组对象转换为JS原生的数组)

那么怎么样的object才干够称为"array-like object"呢?这个问题不急着回答,相信看完文章你会明确的。先看看以下的实验

将HTMLCollection转换成原生Array

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery.makeArray demo</title>
<style>
div {
color: red;
}
</style>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<div> First </div> <div> Second </div> <div> Third </div> <div> Fourth </div>
<script>
// Returns a NodeList
var elems = document.getElementsByTagName("div");
// Convert the NodeList to an Array
var arr = jQuery.makeArray(elems);
// Use an Array method on list of dom elements
arr.reverse();
$(arr).appendTo(document.body);
</script>
</body>
</html>

这里能够看到在chrome中通过document.getElementsByTagName("div")返回的是一个HTMLCollection

而非官网上所说的NodeList,特意去找了NodeList和HTMLCollection的差别:HTMLCollection 对象和 NodeList 对象非常相似,但前者可能既能用名称索引也能用数字索引,而后者仅仅能用数字索引来訪问(当然NodeList也是“array-like object”)

经过实验发现elems能够通过名称和数组来索引,结论:在chrome中通过document.getElementsByTagName("div")返回的是一个HTMLCollection

HTMLCollection能够通过elems.length获取它的长度,而且能够通过elems[0]这种方式来訪问当中的元素

像不像数组的訪问方式?事实上它就是就一个“Array-like object”。可是它并非js的原生数组,所以无法訪问array的native方法。比方(.pop() and .reverse())

而后面通过jQuery.makeArray(elems)转换就得到了原生的JS数组arr,接下来就能够使用array的native方法了!

将jQuery包裹的数组转换成原生Array


除了HTMLCollection。还能够转换什么呢?听说过jQuery包裹的数组这么一个玩意儿吗?

只是肯定接触过。比方通过$('div')得到一组div。这一组div就是一个jQuery包裹的数组

又比方,通过.map()函数得到的也是一个jQuery包裹的数组,也能够length来得到长度。并通过下标索引来訪问,而且jQuery包裹的数组还能够使用jQuery提供的方法。

能够通过$.makeArray(obj)来转换成原生Array,比方最常见的在.map()函数中得到jQuery数组之后转换成原生array再通过join()得到结果

当然,将jQuery包裹的数组转换成原生数组的方法不止这一种。常见的还有.get()和.toArray()

将json对象转换成原生Array


这一种情况略微复杂一点。由于json对象本不是“array-like object”,所以我们须要一种转换

还记得之前我们说的几种“array-like object”吗?它们都能够通过.length来得到长度,而且能够通过下标索引来訪问,比方:fakeArr.length、fakeArr[0]

那么我们能否够通过让json支持这种方式来将它变成“array-like object”呢?

先设计一下:

要让json支持fakeArr.length。简单,仅仅须要定义一个key为length的 键值对就OK了

而支持下标訪问似乎也能够迎刃而解。另外键值对都使用数字来作为key就好了~

那么试试吧:

var fakeArray = {0: "张三", 1: "李四", 2:"朱六", length:3};
var realArray = $.makeArray(fakeArray);
console.log(fakeArray)
console.log(realArray)
realArray.reverse();
console.log(realArray);

看到了吗?成功了。这里的realArray已经是js的原生array了,所以能够使用reverse()等native方法

须要注意的是。转换过程中length非常重要,这个length也就是决定了转换后array的length

若将上述样例中的length指定为2,那么转换后的数组仅仅有前2个元素,也就是["张三", "李四"]

若将上述样例中的length指定为4。那么转换后的数组并不会是我们希望的数组,而是类似于 new Array().push(fakeArray) 这样一个数组

使用jQuery.makeArray() 将多种类型转换成JS原生Array的更多相关文章

  1. 图片轮播(淡入淡出)--JS原生和jQuery实现

    图片轮播(淡入淡出)--js原生和jquery实现 图片轮播有很多种方式,这里采用其中的 淡入淡出形式 js原生和jQuery都可以实现,jquery因为封装了很多用法,所以用起来就简单许多,转换成j ...

  2. jquery makearray()使用

    makearray(),转换一个类似数组的对象成为真正的JavaScript数组.首先看看jquery中array的定义 makeArray: function( arr, results ) { v ...

  3. JS原生Ajax&Jquery的Ajax技术&Json

    1.介绍Ajax Ajax = 异步 JavaScript 和 XML Ajax是一种创建快速动态网页的技术 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以不用整个 ...

  4. C# 字符串string类型转换成DateTime类型 或者 string转换成DateTime?(字符串转换成可空日期类型)

    在c#中,string类型转换成DateTime类型是经常用到的,作为基本的知识,这里在此做个小结.一般来说可以使用多种方法进行转换,最常用的就是使用Convert.ToDateTime(string ...

  5. jQuery绑定事件-多种方式实现

    jQuery绑定事件-多种方式实现: <html> <head> <meta charset="utf-8" /> <script src ...

  6. Jquery第一篇【介绍Jquery、回顾JavaScript代码、JS对象与JQ对象的区别】

    什么是Jquery? Jquey就是一款跨主流浏览器的JavaScript库,简化JavaScript对HTML操作 就是封装了JavaScript,能够简化我们写代码的一个JavaScript库 为 ...

  7. 认识JQuery,JQuery的优势、语法、多库冲突、JS原生对象和JQuery对象之间相互转换和DOM操作,常用的方法

    (一)认识JQuery  JQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一套定义好的方法    JQuery的主旨:以更少的代码,实现更多的功能 (二)JQue ...

  8. jquery中选择checkbox拼接成字符串,然后到后台拆分取值

    jquery中选择checkbox拼接成字符串,然后到后台拆分取值 js中的代码 $("#btn").click(function(){ var chenked=$("i ...

  9. 字符串转换成js的日期格式

    js字符串转日期格式 ,JavaScript字符串转日期格式 大家都知道JS是根据结果来确定数据类型的. 当然我们也是可以转化的,下面我就介绍两种关于JS字符串类型转换成日期类型的方法, 我个人比较喜 ...

随机推荐

  1. Java多线程——线程八锁案例分析

    Java多线程——线程八锁案例分析 摘要:本文主要学习了多线程并发中的一些案例. 部分内容来自以下博客: https://blog.csdn.net/dyt443733328/article/deta ...

  2. zblog实现后台导航栏增加链接功能的最简单方法

    首先在ftp中找到这个目录   zb_system/admin/ 然后找到    admin_top.php      这个文件 再然后找到这行代码      <?php ResponseAdm ...

  3. Android sensor 系统框架 (一)

    这几天深入学习了Android sensor框架,以此博客记录和分享分析过程,其中难免会有错误的地方,欢迎指出! 这里主要分析KERNEL->HAL->JNI这3层的流程.主要从以下几方面 ...

  4. JS——滚动条

    1.核心思想与之前的拖拽盒子是一样的 2.完全将鼠标在盒子中的坐标给滚动条是错的,因为这样会使滚动条顶部立刻瞬间移动到鼠标位置 3.必须在鼠标按下事件时记住鼠标在滚动条内部的坐标,再将鼠标在盒子中的坐 ...

  5. java攻城狮之路--复习xml&dom_pull编程

    xml&dom_pull编程: 1.去掉欢迎弹窗界面:在window项的preferences选项中输入“configuration center” 找到这一项然后     把复选框勾去即可. ...

  6. (转)Struts2访问Servlet的API及......

    http://blog.csdn.net/yerenyuan_pku/article/details/67315598 Struts2访问Servlet的API 前面已经对Struts2的流程已经执行 ...

  7. 10.3 io流 正篇 FileReader FileWriter读写代码

    一.FileWriter 小节: 1)FileWriter fw = new FileWriter("a.txt",true);//表示追加写入,默认是false.正常情况:执行多 ...

  8. CentOS 7 不能连接网路的解决方法

    ---恢复内容开始--- 刚安装的CentOS7 是不能连接网络的,更不能使用yum 进行应用的安装 (1)通过ip addr或者是 ifconfig获取需要编辑的文件名 (2)vi /etc/sys ...

  9. IE低版本和高级浏览器对文本输入事件兼容

    1 一般 使用oninput 事件可以监控文本输入事实触发 2 兼容需要使用onpropertychange . 3 兼容写法   var evenInput=DOM元素.oninput || DOM ...

  10. 原始js表单文本框初始化获取焦点和选中

    发现: 1 使用dom对象.focus() 放在 window.onload 时可以 让这个DOM对象获取焦点. 2 使用DOM对象.select() 可以选中文本框中的文字. 3 不要加上on  , ...