#### **数组的方法有哪些?这些方法中不改变原数组的有哪些?**
数组的方法有:
* concat:连接两个数组,**不改变原数组**
* join:将数组中的内容放入一个字符串中,括号中的参数就是分隔符,**不改变原数组**
* slice:获取数组指定位置区间的元素,**不改变原数组**
* 不传参数时,相当于不操作,返回整个数组
* 传入一个参数时,会返回从该参数到数组末尾的所有元素
* 传两个参数时,会返回从第一个参数到第二个参数之间的所有元素,但是不包含最后一个元素
* 当传入的参数为负数时,会加上数组的长度再取元素,比如说slice(-2,-1)=>slice(3,4)(假设数组长度为5)
* 当传入两个参数,并且第一个参数大于第二个参数时,会返回空数组
* pop:删除并返回数组的最后一个元素,**会改变原数组**
* shift:从数组的头部删除元素,返回的是该元素,**会改变原数组**
* unshift:向数组的头部添加元素,返回的是数组长度,**会改变原数组**
* push:向数组的末尾添加一个元素,返回的是数组长度,**会改变原数组**
* reverse:将数组进行反转,返回的是反转后的数组,**会改变原数组**
* sort:对数组进行排序,原理是先将数组中的元素转换成字符串,然后比较字符串,如果要正确的排序,需要在方法中传入一个比较函数,返回的是排序后的数组,**会改变原数组**
* splice:主要用途是在数组的中部插入或删除元素,返回的是从该数组中删除的元素,如果没有删除,则返回空数组,**会改变原数组**
* **删除任意数量的项**,需要传入两个参数,第一参数指定删除的开始位置,第二个参数指定删除多少项
* **插入任意数量的项**,需要传入3个参数,分别为起始位置,要删除的项数(一般取0),插入的项(可以为多项)
* **替换指定数目的项**,参数和上面完全相同,只是第二个参数不再取0
* indexOf:查找指定元素的位置,返回该元素第一次出现的位置,**不会改变原数组**
* 如果只传入一个参数,表明是查找该元素
* 如果传入两个参数,则第一个表示从哪个位置开始往后找,第二个参数表示要查找的元素
* lastIndexOf:从后往前查找指定元素的位置,只是和indexOf的查找方向不同,其他部分均相同
* reduce:这个方法很强大,也比较复杂,我专门总结了一篇[文章](https://segmentfault.com/a/1190000017420042),这个方法也**不会改变原数组**
总结:
改变原数组的方法有:shift,push,pop,unshift,sort,reserve,splice
不改变原数组的有:concat,join,slice,reduce,indexOf,lastIndexOf
- 面试自我介绍
- 面试常规题
- HTML,CSS
- 1.动画animation有哪些属性及其基本使用
- 2.transform有哪些属性及其基本使用
- 3.::before 和 :after中双冒号和单冒号 有什么区别
- 4. 如何实现一个元素的垂直水平居中
- 5. position的值relative和absolute定位原点是?
- 6. 用纯CSS创建一个三角形的原理是什么?
- 7. title与h1的区别、b与strong的区别、i与em的区别?
- 8. 使用 CSS 预处理器吗?喜欢那个?
- 9. 如果需要手动写动画,你认为最小时间间隔是多久,为什么?
- 10. 对HTML5的了解
- 11. img与文本之间的留白
- 12. 给唯一子元素margin-top,父元素跟随移动
- 13. 什么是重构和架构
- 14. css选择器的优先级别
- JavaScript
- 1. js变量声明提升
- 2.数组的方法有哪些?这些方法中不改变原数组的有哪些?
- 3. 理解undefined 和 null 区别
- 4. http与https的区别
- 5.https的原理及其局限性
- 6. let/const/var的区别
- 7. JS的内存机制与垃圾回收机制
- 8. 值类型和引用类型的区别
- 9. document.writer和innerHTML
- 10. document.ready和window.onload的区别
- 11. js有几种方法创建一个对象
- 12. 什么是面向对象?其三大特性是什么?
- 13. 数组遍历的方法
- 14. js字符串反转
- 15. 类型转换
- 1. 如何JSON对象转为字符串
- 2. 字符串转化为数字
- 3. 数组与字符串之间的相互转换
- 16. 深拷贝和浅拷贝的区别
- 17. DOM的加载顺序
- 18. call、apply、bind的区别
- 19. ES5和ES6中类的实现
- 10. new操作符的作用
- 21. 事件冒泡和事件捕获
- 22. 同步和异步
- 23. this关键字怎么理解
- 浏览器以及服务端
- 1. 前端开发有哪些优化问题
- 2. AJAX请求总共有多少种CALLBACK
- 3. 输入URL到看到页面发生的全过程
- 4. CSS和JS的位置会影响页面效率
- 5. 前端页面有哪三层
- 6. 说一下浏览器的缓存机制
- 7. 对web标准及w3c的了解和认识
- 8. 什么是路由
- 9. 状态码
- 10. 浏览器内核
- 11. MVC和MVVM的区别
- 12. cookie、session的区别
- 算法
- 1. 如何判断一个对象是否为数组
- 2. 数组去重的方法
- 3. 数组排序
- 4. 数组去重
- 5. 反转数组
- 6. 数组复制
- 7. 取偶数
- 8. 字符串去重
- 全局性问题
- 1. 谈谈对前端模块化的理解
- 2. 移动布局的单位rem,vw,rpx等
- 3. css 动画和 js 动画的差异
- 4. 谈谈对ES6的理解
- 网络数据请求
- 1. 原生Ajax请求
- 2. jQuery-Ajax请求
- 3. Vue-Ajax请求
- 4. React-Ajax请求
- vue和react
- 1. vuex的工作流
- 2. redux工作流
