数组
什么是数组
数组的概念:
数组,是可以存储着一些任意类型或者相同类型数据的集合。
数组的创建方式
内置构造函数创建数组:
1.使用 js 的内置构造函数 Array创建一个数组
2.构造函数(类)特点:首字母大写,new运算符调用
字面量创建一个数组:
1.直接使用 [ ] 的方式创建一个数组
2.在计算机科学中,字面量是用于表达源代码中一个固定值的表示法。
声明提升
1、变量声明提升:
不管变量在函数体里的什么位置进行定义(声明),那么在预解析(预编译)时,浏览器会先把变量的声明提升到函数体的最开始
2、注意:
提升的是变量的声明,而不是赋值
数组的length属性
- length 就是表示数组的长度,数组里面的成员个数
- length 属性是动态的(可读写)
- 即通过设置这个属性,可以从数组的末尾移除项或向数组中添加新项。
数组的索引
- 如何访问数组的每个元素,“索引”哈
- 索引也叫作下标,是指一个数据在数组里面排在第几个的位置
- 注意: 在所有的编程语言里面,索引都是从 0 开始的,所以,索引的最大值是 数组的长度减一
递归
一、递归概念:
递归就是特殊的嵌套调用,递归就是函数自己调用自己
递归函数中必须有一个分支是不调用自己的,要不然就调死了。
二、递归函数的特点:
1、跟踪比较麻烦
2、执行效率低
三、递归使用场景(度的把握):
1、如果一个需求即能用循环解决,又能用递归解决,强烈建议你使用循环。
2、在树形结构里,是必须使用递归了。
举两个例子:
1、用递归去做阶乘:
2、用递归去做斐波那契数列:
for和for…in循环
for循环遍历数组:
遍历:就是把数组的元素过一遍
for…in循环:
1.遍历数组
2.遍历对象
for…in 循环和for循环的区别
1、在循环数组时
for in 循环给循环变量赋值为 字符串类型,for in循环必须把所有的元素要循环一遍,普通的for循环给循环变量赋值为 数字类型,普通的for的循环,可以控制循环哪些元素,更加灵活。
2、循环对象:
for…in循环可以循环对象
for循环,没法直接循环对象。
3、扩展
用for…in循环数组时,就是把数组当作了对象处理,下标就是键(键就是属性名;)。
再其实啊,浏览器在处理数组时,会(可以)把它当作对象
for…in循环的案例:
for循环的案例:
数组的官方函数
- push() 可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度。
- pop() 从数组末尾移除最后一项,减少数组的length值,然后返回移除的项。
- unshift()方法能够在数组前面添加任意个项并返回新数组的长度。
- shift() 方法能够移除数组中的第一个项并返回该项,同时将数组长度减 1。
- reverse() 方法会反转数组项的顺序。
- sort() 方法按字母表升序排列数组项。
- concat() 方法可以基于当前数组中的所有项创建一个新数组,参数可以是数组项或者数组。
- slice() 方法它能够基于当前数组中的一或多个项创建一个新数组。可以接受一或两个参数。
- splice() 方法,对数组进行删除、插入、替换,是最强大的数组方法,返回值是数组,改变原数组。
- join()方法,将数组转换成对应的字符串。参数就是连接符。
数组的排序
什么是排序:
排序,就是把一个乱序的数组,通过我们的处理,让他变成一个有序的数组
排序的类型:
1.冒泡排序
2.选择排序
不同数据类型在内存中存储的区别
基本数据类型:基本数据类型: number / string / boolean / undefined / null
基本数据类型在内存中的存储情况
复杂数据类型
复杂数据类型在内存中的存储情况
数据类型之间的比较和赋值
比较:
基本数据类型是 “值” 之间的比较
复杂数据类型是 “地址” 之间的比较
赋值:
基本数据类型之间的赋值(值传递)
复杂数据类型之间的赋值(引用传递)
对象
对象的概念:
对象是javascript的数据类型。对象是一种复合值,它将很多值聚合在一起,可 通过名字访问这些值。对象也看做是属性的无序集合,每个属性都是一个键/值对。
对象的创建
1.构造函数创建对象
2.字面量创建对象