arguments是每个函数在运行的时候自动获得的一个近似数组的对象(除了length外没有其他属性),这个arguments对象其实并不是Array,所以没有slice方法. Array.prototype.slice.call( )可以间接对其实现slice的效果,而且返回的结果是真正的Array. slice实现数据浅拷贝,原数据不会被修改. //查看 V8 引擎 array.js 的源码,可以将 slice 的内部实现简化为: function slice(start, end) { v…
JavaScript中的Array.prototype.slice.call(arguments)能将有length属性的对象转换为数组(特别注意: 这个对象一定要有length属性). 但有一个例外,IE下的节点集合它不能转换(因为IE下的dom对象是以com对象的形式实现,js对象和com对象不能进行转换) 首先,我们来看看JavaScript中的slice用法, 在JavaScript中Array是一个类,slice是此类中的一个方法,slice的中文意思是 ‘截取’ 一个是String.…
假如你是一个 JavaScript 开发者,你可能见到过 Array.prototype.slice.apply(arguments) 这样的用法,然后你会问,这么写是什么意思呢? 这个语法其实不难理解,只是它有些不好看.Array 是 JavaScript 的基本类型,你可以使用 Array.prototype 获取它的属性值,在这里我假设你已经了解了 prototype 的概念. slice 是 JavaScript 的一个方法,用于选取一个数组的一部分数据,并返回一个新的数组.它可以接收两…
$tpl=new Smarty();//新建一个smarty对象,我使用的是Smarty-3.1.6版本 1.设置smarty模板路径$tpl->setTemplateDir():默认情况下是templates 2.设置smarty模板编译路径$tpl->setCompileDir();默认情况下是templates_c 3.设置smarty模板引擎的左右 分隔符, $tpl->left_delimiter="<{";        $tpl->right…
HttpContext只是个类名,HttpContext.Current才是一个已实例化的对象..比如这样一个类: class A{ public static A Current{get;set;} public int ID {get;set;} public A() { A.Current = new A(); }} 要访问ID字段,要么得A a = new A(),然后访问a.ID,要么通过A.Current.ID才能访问,因为ID是个属性,直接类名点属性是不能访问的,必须先实例化对象.…
最近在看廖雪峰的JS课程,浏览器中的操作DOM的那一章,有这样一道题. JavaScript Swift HTML ANSI C CSS DirectX <!-- HTML结构 --> <ul id="test-list"> <li>JavaScript</li> <li>Swift</li> <li>HTML</li> <li>ANSI C</li> <li&…
在es5标准中,我们经常需要把arguments对象转换成真正的数组 // 你可以这样写 var arr = Array.prototype.slice.call(arguments) // 你还可以这样写 var arr = [].slice.call(arguments) // 你要是不怕麻烦,你还可以这样写 var arr = [].__proto__.slice.call(arguments) 以上三种写法是等价的. // 当你了解原型链,你就知道 Array.prototype ===…
看你不知道的JavaScript中卷 2.1数组时有个疑问.具体是这样的: 通过“借用”数组的方法可以很方便的处理字符串.可以“借用”数组的非变更方法,但不能“借用”数组的可变更方法. 用代码来描述就是: var a = 'foo'; // 数组的非变更方法,即不改变原有数组的方法 var b = Array.prototype.join.call(a, '-'); var c = Array.prototype.map.call(a, v => v.toUpperCase()).join()…
ECMAScript 7 中新增了用于检测数组中是否包含某个元素 Array.prototype.includes() API,想到了 Array 其实有很多相关 API 可以检测到是否包含某个元素,比如 Array.prototype.indexOf,于是好奇为什么要实现这样一个 "看起来功能有点重复的 API". 前端开发 QQ 群:377786580 原文发表于 http://tasaid.com,转载请参阅 转载授权. 前言 最近又看了下 ECMAScript 7 规范,看到新…
__proto__: 这个属性是实例对象的属性,每个实例对象都有一个__proto__属性,这个属性指向实例化该实例的构造函数的原型对象(prototype). proterty:这个方法是对象的属性.(据说和一个对象的attr类似,比如dom对象中) prototype:每个构造函数都有一个prototype对象,这个对象指向该构造函数的原型. 对象自身属性方法和原型中的属性方法的区别: 对象自身的属性和方法只对该对象有效,而原型链中的属性方法对所有实例有效. 例子: function bas…
类数组对象:arguments js把传入到这个函数的全部参数存储在arguments里面,其实arguments也是个对象,而且是一个特殊的对象,它的属性名是按照传入参数的序列来的,第1个参数的属性名是’0’,第2个参数的属性名是’1’,以此类推,并且它还有length属性,存储的是当前传入函数参数的个数,很多时候我们把这种对象叫做类数组对象. 数组比类数组对象多了很多其他的方法,类数组对象只是长得像数组而已. 在arguments对象里面,数据是这样存储的: { length: 4, '0'…
首先看到 www.w3school.cn上的解释:http://www.w3school.com.cn/jsref/jsref_slice_array.asp 定义和用法 slice() 方法可从已有的数组中返回选定的元素. 语法 arrayObject.slice(start,end) 参数 描述 start 必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推. end 可选.规定从何处结束选取.该参数是数…
在官方的解释中,如[mdn] The slice() method returns a shallow copy of a portion of an array into a new array object. 简单的说就是根据参数,返回数组的一部分的copy.所以了解其内部实现才能确定它是如何工作的.所以查看V8源码中的Array.js     可以看到如下的代码: 一.方法  ArraySlice,源码地址,直接添加到Array.prototype上的“入口”,内部经过参数.类型等等的判断…
我们知道函数里面的参数实际上是一个以数组形式储存的对象 但它并非一个数组 如果我们要将它转换为数组可以调用Array.prototype.slice() 这个方法 分析一下这个方法: Array.prototype:Array其实一个类名,但是调用类里面的方法只能够通过类的实例对象调用所以这里用了  Array.prototype 通过它自身的原型对象调用 其次是slice():这个是Array类里面的一个方法功能是截取数组里面的某一部分内容,它接收两个参数slice('数组下标起始位置','数…
Array.prototype.slice的妙用 开门见山,关于Array 的slice的用法可以参考这里 http://www.w3school.com.cn/js/jsref_slice_array.asp . 除了常见的从某个数组中抽取出新的数组外,它还有一些其他的用法. 经常的,可以看到Array.prototype.slice(arguments, 0); 这个写法可以用于function() {} 内,这样可以将函数的参数列表转换成一个真正的数组.请看一个例子: var slice…
很多框架或者库里面都会有这句的使用,最多的还是通过Array.prototype.slice.call(arguments,0)把arguments这个伪数组转换为真正的数组.但为什么可以这么做,却一直是半懂不懂的.昨天晚上看了mootools的源码,google了一下,终于彻底明白了. call方法的作用就不用多说了,Array.prototype.slice.call(arguments,0)就类似于arguments.slice(0),但因为arguments不是真正的Array,所以它没…
首先,slice有两个用法,一个是String.slice,一个是Array.slice,第一个返回的是字符串,第二个返回的是数组 在这里我们看第二个方法 1.在JS里Array是一个类 slice是此类里的一个方法   那么使用此方法应该Array.prototype.slice这么去用   slice从字面上的意思很容易理解就是截取(当然你不是英肓的话)   这方法如何使用呢?   arrayObj.slice(start, [end]) 很显然是截取数组的一部分 2.我们再看call  …
目的 对于这两个数组操作接口,由于不理解, 往往被误用, 或者不知道如何使用.本文尝试给出容易理解的阐述. 数组 什么是数组? 数组是一个基本的数据结构, 是一个在内存中依照线性方式组织元素的方式, 其中元素的类型必须是相同的, 这个每个元素的索引地址才能被计算出来, 索引通常是数字,用来计算元素之间存储位置的偏移量. 结构如下: javascript数组 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Glob…
Array.prototype.slice.call(document.querySelectorAll('a'), 0)的作用就是将一个DOM NodeList 转换成一个数组. slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分.语法为arr.slice([begin[, end]]),其中arr可为string或Array.更多了解可以参考MDN document.querySelectorAll('a')获取了一个NodeList对象,它看起来像一个数组,你可以使用…
Array.prototype.slice.call(arguments)   我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换) 如: var a={length:2,0:'first',1:'second'}; Array.prototype.slice.call(a);// ["first", &quo…
IE9之前的IE版本的HTMLCollection以及NodeList不是Object的子类. 在通过Array.prototype.slice.call进行数组化的时候,IE9之前的IE版本会抛出异常,因此需要进行兼容处理. <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&g…
我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换) 如: 1 var a={length:2,0:'first',1:'second'}; 2 Array.prototype.slice.call(a);// ["first", "second"] 3 4 var a={length:2}…
我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换) 如: 1 var a={length:2,0:'first',1:'second'}; 2 Array.prototype.slice.call(a);// ["first", "second"] 3 4 var a={length:2}…
欢迎访问我的个人博客:http://www.xiaolongwu.cn Array.prototype.slice.call(arguments)的作用为:强制转化arguments为数组格式,一般出现在框架活插件的源码中 如何理解 上面的代码等价于[ ].slice.call(arguments) 或者随便一个数组调用都行 [1,2,4].slice.call(arguments) 因为,前面的调用者的作用只是沿着原型链向上找,最终找到Array为止,slice为Array原型上的一个方法 s…
在看别人代码时,发现有这么个写法:[].slice.call(arguments, 0),这到底是什么意思呢? 1.基础 1)slice() 方法可从已有的数组中返回选定的元素. start:必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推. end:可选.规定从何处结束选取.该参数是数组片断结束处的数组下标.如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素.如果这个参数是负数,那…
在看别人代码时,发现有这么个写法:[].slice.call(arguments, 0),这到底是什么意思呢? 1.基础 1)slice() 方法可从已有的数组中返回选定的元素. start:必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推. end:可选.规定从何处结束选取.该参数是数组片断结束处的数组下标.如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素.如果这个参数是负数,那…
概述 今天在看书的时候看到Array.prototype.slice.call(arguments),有点看不懂,所以认真研究了一下,记录下来,供以后开发时参考,相信对其他人也有用. call 每一个函数都有一个call方法,它可以接受很多参数,其中第一个是这个函数的上下文,后面的是函数的参数.比如: function add(a, b) { return a + b; } add(3, 4); //7 add.call(null, 3, 4); //7 add.call(this, 3, 4)…
我们知道,Array.prototype.slice.call(arguments)能将具有length属性的对象转成数组,除了IE下的节点集合(因为ie下的dom对象是以com对象的形式实现的,js对象与com对象不能进行转换) 如: 1 var a={length:2,0:'first',1:'second'}; 2 Array.prototype.slice.call(a);// ["first", "second"] 3 4 var a={length:2}…
Array.prototype.slice.call(arguments,1)该语句涉及两个知识点. arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上以数组形式来表示,但实际上没有原生数组slice的功能,这里使用call方法算是对arguments对象不完整数组功能的修正. slice返回一个数组,该方法只有一个参数的情况下表示除去数组内的第一个元素.就本上下文而言,原数组的第一个参数是“事件名称”,具体像“click”,"render&quo…
1.classlist document.getElementById("myDIV").classList.add("mystyle"); classList 属性返回元素的类名,作为 DOMTokenList 对象. 该属性用于在元素中添加,移除及切换 CSS 类. classList 属性是只读的,但你可以使用 add() 和 remove() 方法修改它. 返回值:一个 DOMTokenList, 包含元素的类名列表 方法 描述 add(class1, cl…