专栏首页Jerry的SAP技术分享很多高手的JavaScript代码里都有array.slice(0),这语句有什么用

很多高手的JavaScript代码里都有array.slice(0),这语句有什么用

这个stackoverflow链接里有详细讨论。 https://stackoverflow.com/questions/5024085/whats-the-point-of-slice0-here

一个网友在学习jQuery源代码时,对下面一行代码产生了疑惑:

namespace = new RegExp("(^|\\.)" +
  jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");

其他热心网友的解释是:对数组施加sort操作,会修改调用sort的数据内元素的原始位置。因此为了保证不对sort方法调用的原数组产生副作用(side effect),我们使用slice(0)对原始数组进行一个深拷贝:

slice() always returns a new array - the array returned by slice(0) is identical to the input, which basically means it’s a cheap way to duplicate an array.

slice另一种很有用的做法是将类数组对象转化为真正的数组对象。所谓类数组对象,一个例子就是API document.getElementsByTagName返回的结果NodeList的类型:虽然不是真正的数组,但是有length属性,支持用JavaScript按照索引访问每个元素。 使用var anchorArray = [].slice.call(document.getElementsByTagName(‘a’), 0)这种乾坤大挪移的办法,借用了[]这个原生数组提供的slice方法,可以轻松把NodeList转换成真正的JavaScript数组。

It’s also used to convert array-like objects into arrays. For example, a DOM NodeList (returned by several DOM methods like getElementsByTagName) is not an array, but it is an array-like object with a length field and is indexable in JavaScript. To convert it to an array, one often uses:

var anchorArray = [].slice.call(document.getElementsByTagName('a'), 0)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 重读《学习JavaScript数据结构与算法-第三版》- 第4章 栈

    本章是重读《学习JavaScript数据结构与算法-第三版》的系列文章,本章为各位小伙伴分享数据结构-栈的故事,请让胡哥带你走进栈的世界

    胡哥有话说
  • Flink Forward 2019--实战相关(16)--Yelp分享实时访问规模预测

    Realtime Store Visit Predictions at Scale -- Luca Giovagnoli(Yelp)

    阿泽
  • 聊聊dubbo的AwaitingNonWebApplicationListener

    本文主要研究一下dubbo的AwaitingNonWebApplicationListener

    codecraft
  • (自制翻译)如何解决在vue中this报错undefined

    当你开心地在编程,惊叹于vue的神奇,这时你却遇到这样的情况: 你的vue应用无法正常工作,你收到的报错是:this is undefined

    杨肆月
  • Node进阶-探究不在V8堆内存中存储的Buffer对象

    Buffer对象,类似数组,它的元素为16进制的两位数,即0到255的数值。可以看出stream中流动的数据是Buffer类型,二进制数据,接下来开始我们的Bu...

    用户1462769
  • Javascript中你必须理解的执行上下文和调用栈

    人的一生就是进行尝试,尝试的越多,生活就越美好。 ——爱默生

    五月君
  • Javascript 引擎 V8 7.7 版本发布

    链接: https://www.oschina.net/news/109069/v8-7-7-released

    五月君
  • Lambda 表达式有何用处?如何使用?

    zhihu.com/question/20125256/answer/324121308

    格姗知识圈
  • AJAX常见面试题(修订版)

    AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种创建交互式网页应用的网页开发技术。、

    乔戈里
  • 面向前端工程师的Nodejs入门手册(一)

    本文面向的读者已经是了解JavaScript基本使用的前端程序员,但是缺乏服务端的经验,接下来将带你走进在服务端的世界,看看运行在服务端的JavaScript是...

    用户1462769

扫码关注云+社区

领取腾讯云代金券