• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > Math.prototype.concat详解

Math.prototype.concat详解

作者:MorningDuGe 字体:[增加 减小] 来源:互联网 时间:2017-08-31

MorningDuGe通过本文主要向大家介绍了js prototype详解,scope prototype详解,prototype详解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
var arr1 = ['a', 'b', 'c'];
var arr2 = arr1.concat([1,2],4,5);//这里[1,2],4,5不是数组
console.log(arr2);//(7) ["a", "b", "c", 1, 2, 4, 5]

当concat参数不为数组时,如上面的[1,2],4,5,则会将[1,2],4,5里面的参数全部拆开添加到新数组中,而调用者数组不会改变,会原封不动的首先添加到新数组中。

当concat的参数整体不是数组,但里面的某几个项是数组时,此项的改变不会作用到新数组上

var arr1 = [['a', 'b'], 'c'];
var arr2 = [1,2];
var arr3 = arr1.concat(arr2,4,5);

arr3;//(6) [Array(2), "c", 1, 2, 4, 5]
arr2.push(1000);
arr3;//(6) [Array(2), "c", 1, 2, 4, 5]

可见arr2的改变并未影响新数组arr3;

总结

当concat的参数整体不是数组,相当于将其参数用数组的中括号[]括起来,然后再toString将其扁平化后添加到新数组末端,且参数中的数组不会影响新数组。

当concat的参数是数组时

当concat的参数是数组时,相当于遍历这个数组,将每一项值浅拷贝到新数组中因此原数组中某一个数组项(如下面的arr2)的改变会体现到新数组上。

var arr1 = [['a', 'b'], 'c'];
var arr2 = [1,2];
var arr3 = [arr2,4,5];
var arr4 = arr1.concat(arr3);
arr4;
/**
0:["a", "b"]
1:"c"
2:(2) [1, 2]
3:4
4:5
**/

现在改变arr2的值:

arr2.push(345);
arr4;
/**
0:(2) ["a", "b"]
1:"c"
2:(3) [1, 2, 345];//注意这里已经将arr2中新加入的值加入新数组中了
3:4
4:5
**/

而当concat的参数为数组,且这个数组整体改变时不会影响新数组,还是上面的例子,现在更新arr3:

arr3.push(890);
arr4;
/**
0:["a", "b"]
1:"c"
2:(2) [1, 2]
3:4
4:5
**/

arr4并没有变化。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • JS排序之冒泡排序详解
  • JS排序之快速排序详解
  • JS排序之选择排序详解
  • js时间查询插件使用详解
  • 详解JS中遍历语法的比较
  • JS常见算法详解
  • 详解JS中的立即执行函数
  • js事件冒泡与事件捕获详解
  • js 博客内容进度插件详解
  • 详解js的异步编程技术的方法

相关文章

  • 2017-05-11原生js实现弹出层效果
  • 2017-05-11angular-cli修改端口号【angular2】
  • 2017-05-11利用VUE框架,实现列表分页功能示例代码
  • 2017-05-11js基于myFocus实现轮播图效果
  • 2017-05-11微信小程序 欢迎页面的制作(源码下载)
  • 2017-08-21js面向对象之封装(构造函数)
  • 2017-05-11js控制文本框禁止输入特殊字符详解
  • 2017-05-11javaScript嗅探执行神器-sniffer.js
  • 2017-05-11Ajax 加载数据 练习代码
  • 2017-05-11vue实现添加标签demo示例代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
    • jQuery+ajax的资源回收处理机制分析
    • Android中Okhttp3实现上传多张图片同时传递参数
    • jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
    • JS实现异步上传压缩图片
    • bootstrap IE8 兼容性处理
    • JS日程管理插件FullCalendar中文说明文档
    • 微信小程序 Nginx环境配置详细介绍
    • vue父子组件的数据传递示例
    • 微信小程序实现图片轮播及文件上传

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有