Array,prototype.concat.apply与[].conat.apply.
2018-06-24 02:17:57来源:未知 阅读 ()
一直都知道JS数组Array内置对象有一个concat方法,但是也没怎么研究过,今天偶然就看了看
concat是连接一个或多个数组
返回的是连接后数组的一个副本
var oldArr=[];
var arr=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]];
var newArr=oldArr.conat(arr);
console.log(newArr);
console.log(oldArr);//[] 没有改变
于是乎 我又想到把数组的每一项都当成数组与oldArr连接
这就需要apply方法了 将数组变成参数列表传参
console.log(Array.prototype.concat.apply(Array,arr));
//结果很奇怪
没有得到想到的结果
箭头地方是什么鬼???
想了想
Array.prototype.concat.apply(Array,arr);
不就是Array调用了Array.prototype上的concat然后传入参数arr
把Array 换成Number String 等 不就是 借用Array.prototype上的concat方法罢了
然后把调用者添加到数组的0位置
我感觉就是 arr.unshift(Array);
其他情况的话就会 push 了
看下面的图就明白了吧
console.log(Array.prototype.concat.apply(Number,arr));
console.log(Array.prototype.concat.apply(String,arr));
console.log(Array.prototype.concat.apply(RegExp,arr));
好像是这么回事
所以 把aplly里面的参数改成[]不就好了
console.log(Array.prototype.concat.apply([],arr));
可以简单点写[].concat.apply([],arr);
数组不仅可以连接数组 数组还可以连接字符串 数字 对象 等
console.log([].concat({a:2,b:3,c:3}));
他会把对象放在数组里,这里就不能说连接了吧 我中有你嘛
console.log([].concat("123"}));
根据这些我总结出了 如果 concat传入的参数不是数组 就不会遍历 直接暴力添加到数组项
而参数是数组的话就会遍历
需要注意的是 千万不要傻傻的 用String.concat(); Number.concat()等
上面的是用apply方法改变this指向借用的
它本身没有concat
String.prototype里面有concat但是实现结果不一样滴!
只是我个人的理解 希望对大家有帮助
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:DuelJS 介绍
- vue.js开发环境搭建教程 2020-03-16
- javascript 中关于array的常用方法详解 2020-03-16
- 关于JS array的数组 2020-03-08
- javascript中怎样使用array数组 2020-02-20
- 详解Webstorm 新建.vue文件支持高亮vue语法和es6语法 2020-02-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash