数组和arguments
Arguments(Array-Like Objects)
arguments对象是所有(非箭头)函数中都可用的局部变量
拥有四个属性(按照规范来说只有三个了----caller)
- arguments.callee---指向当前执行的函数
- agruments.caller----指向调用当前函数的函数 (已移除)
- arguments.length---指向传递给当前函数的参数数量
- arguments.arguments--- 返回一个新的Array迭代器对象,该对象包含参数中每个索引的值
arguments对象可以与剩余参数、默认参数和解构赋值参数结合使用
function func(...args){
return args
}
func(1,2,3) // [1,2,3]
/* --------------------------------------------------------- */
function func(a) {
arguments[0] = 99; // 更新了arguments[0] 同样更新了a
console.log(a);
}
func(10); //
"use strict"
func(10); //
/* --------------------------------------------------------- */
function func(a) {
a = 99; // 更新了a 同样更新了arguments[0]
console.log(arguments[0]);
}
func(10); //
"use strict"
func(10); //
/* --------------------------------------------------------- */
function func(a = 55) {
arguments[0] = 99; // 更新了arguments[0]不会更新a
console.log(a);
}
func(10); //
/* --------------------------------------------------------- */
function func(a = 55) {
a = 99; // 更新了a不会更新arguments[0]
console.log(arguments[0]);
}
func(10); //
总结:
不在严格模式下,arguments[0]改变,会使相对应的形参也发生改变,
修改形参,arguments[0]也会相应被修改
而在严格模式则不会被修改
数组
拥有三个属性,3个方法,N个实例方法(原谅我不数了)
数组是一种类列表对象,它的原型中提供了遍历和修改元素的相关操作
数组与Arguments的区别
数组是构造函数 typeof Array ( function)
Arguments是所有(非箭头)函数中都可用的局部变量 使用方式只能在函数中
将Arguments转为Array的方法(摘自hanzichi老师)
function fn() {
// Uncaught TypeError: arguments.push is not a function
// arguments.push(4);
var arr = [];
for (var i = 0, len = arguments.length; i < len; i++)
arr[i] = arguments[i];
arr.push(4); // [1, 2, 3, 4]
}
fn(1, 2, 3);
/* ------------------------------------------ */
function fn() {
var arr = Array.prototype.slice.call(arguments);
arr.push(4); // arr -> [1, 2, 3, 4]
}
fn(1, 2, 3);
或者可以用 [] 代替 Array.prototype 节省几个字节。
function fn() {
var arr = [].slice.call(arguments);
arr.push(4); // arr -> [1, 2, 3, 4]
}
fn(1, 2, 3);
/* ------------------------------------------ */
// es6语法
var str = "helloworld";
var arr = Array.from(str);
// ["h", "e", "l", "l", "o", "w", "o", "r", "l", "d"]
/* ------------------------------------------ */
// 兼容ie方法
function nodeListToArray(nodes){
var arr, length;
try {
// works in every browser except IE
arr = [].slice.call(nodes);
return arr;
} catch(err){
// slower, but works in IE
arr = [];
length = nodes.length;
for(var i = 0; i < length; i++){
arr.push(nodes[i]);
}
return arr;
}
}
资料参考:MDN Arguments MDN Array hanzichi老师的见解
数组和arguments的更多相关文章
- 伪数组(arguments及字符串)转数组的方法 贼简单
超简单的伪数组转数组的方法, 简单到令人发指! (这里伪数组使用arguments) 1.使用 Array.prototype.slice Array.prototype.slice.call(arg ...
- 08-为数组和arguments
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- (三十六)类数组对象arguments
类数组对象:arguments 在函数调用时,我们总能见到arguments这个对象,它具体是用来干什么的呢?感觉逼格非常高呢 函数在使用时,我们总会位函数传入各种参数,arguments会将参数储存 ...
- 类数组对象arguments 和 数组对象
arguments并不是一个真正的数组,而是一个“类似数组(array-like)”的对象: 就像下面的这段输出,就是典型的类数组对象: {0:12, 1:23} 一.类数组 VS 数组 相同点: 都 ...
- 浅谈js的类数组对象arguments
类数组对象:arguments总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments的 ...
- js 类数组对象arguments
function Add() { for (var i = 0; i < arguments.length; i++) { console.log(arguments[i]); } } Add( ...
- 将arguments转换成数组的方法
将函数里的arguments,转换成一个真正的数组的方法,arguments是个类数组,除了有实参所组成的类似数组以外,还有自己的属性,如callee,arguments.callee就是当前正在执行 ...
- one:arguments对象伪数组
这是我的第一个博客 <script> //计算N个数字的和 //定义一个函数,如果不确定用户是否传入了参数,或者说不知道用户传入了几个参数,没办法计算, // 但是如果在函数中知道了参数的 ...
- javascript arguments(转)
什么是arguments arguments 是是JavaScript里的一个内置对象,它很古怪,也经常被人所忽视,但实际上是很重要的.所有主要的js函数库都利用了arguments对象.所以agru ...
随机推荐
- mariadb主从备份
mariadb主从备份 master主库配置 停止mariadb systemctl stop mariadb 修改配置文件my.conf vim /etc/my.cnf [mysqld] serve ...
- R语言笔记完整版
[R笔记]R语言函数总结 R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头, ...
- BZOJ 2038 小Z的袜子(hose) (莫队算法)
题意:中文题. 析:很著名的莫队算法,先把这个求概率的式子表达出来,应该是分子:C(x1, 2) + C(x2, 2) + C(x3, 2) + ... + C(xn, 2) 分母:C(n, 2), ...
- HDU 3366 Passage (概率DP)
题意:T组测试数据,一个人困在了城堡中,有n个通道,m百万money ,每个通道能直接逃出去的概率为 P[i] ,遇到士兵的概率为 q[i], 遇到士兵得给1百万money,否则会被杀掉,还有 1-p ...
- 如何使用office2016发布CSDN博客
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- tomcat 无法clean 的bug
如果你打开类似这种的文件夹了,那恭喜你,你无法正常clean E:\e\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0 请关 ...
- ArcGIS API for Javascript 图层切换渐变效果实现
在一个WebGIS系统中往往要实现图形的切换,比如业务图层的切换,以及底图的切换等等,可以通过控制图层的可见性来实现.比如通过设置图层的opacity .visible来控制,前几天有网友聊天的时候提 ...
- 【Head First Java 读书笔记】(八)接口与抽象类
接口是什么?它是一种百分之百纯抽象的类. 什么是抽象类?即无法初始化的类. 例如,我们设计一个animal类,以此类为父类,分别设计了多种动物子类,例如Lion,Tiger,Cat,Wolf,Do ...
- 浅谈tcp_nodelay的作用
今天在用nginx作web缓存的时候,发现在http里加入这样个参数,能有效的提高数据的实时响应性,那就是tcp_nodelay.下面我们来说说tcp_nodelay的原理: TCP_NODELAY和 ...
- 在线测试正则表达式工具 jQuery.Validate验证库
http://www.jb51.net/tools/zhengze.html http://www.cnblogs.com/weiqt/articles/2013800.html