一,基本类型和引用类型
(一),基础类型
1.包含的数据
number / string / boolean / undefined / function / null
2.存储数据
基础数据类型会将数据存储在栈中
- 存储数据,也是会在内存空间中有专门的一片空间,用来存储数据,这个空间的名称叫
栈
- 在内存中存放数据时,内存空间会被划分成多个区域,每个区域各司其职
- 例如:
- 内存会专门划分一片区域用来运行我们的系统,
- 内存会专门划分一片区域用来执行js代码
3.赋值
基本数据类型的赋值,是将其中一个值复制到另外一个容器中。
var a = 10
var b = a // 将a中的值复制一份放在b中,复制以后,有两个独立的值
a = 20 // 此时改变一个,另外一个不会发生改变的
console.log(b); // 10
4.全等比较
基本类型会先比较类型是否相同,如果类型相同了,再比较值是否相等
会比较类型和值
var a = 1
var b = 1
console.log( a === b) ; // true
(二),引用类型
1.包含的数据
{} / [] / function
2.存储数据
引用数据类型会将数据存储在堆中,将堆的地址存储在栈中
var arr = ['a','b','c']
会在栈中开辟一个空间arr,然后将数据存放在另外一个内存空间 堆 中,
堆
中存放数据的内存地址,放在栈中的arr的空间
3.赋值
引用类型的赋值是将一个栈中的内存地址复制一份放到另外一个变量容器中,改变其中一个的值,另外一个也会发生改变
var arr = ['a' , 'b' , 'c']
var brr = arr // 将arr在栈中的存储地址复制一份给了brr,此时arr和brr共享一个内存地址
arr [1] = 'd' // 将arr存储的内存地址中的值的b改成d,此时没有改变arr在栈中的内存地址
console.log(brr) // 则brr也就会跟着发生了改变 \\ ['a','d','c']
注意事项:
var arr = ['a','b','c']
var brr = arr
arr = [1,2,3] // 此时是相当于给arr重新赋值,会把arr在栈中的内存地址改掉
console.log(brr); // 此时 brr的内存地址还是arr原来的那个 \\ ['a','b','c']
4.全等比较
引用类型在全等比较时,会比较栈中存储的内存地址是否相同
var arr = 【1,2,3】
var brr = 【1,2,3】
console.log(arr === brr) // false
(三),注意
- 一旦碰到赋值操作,特别的注意,是不是引用类型的赋值
- 实参给形参赋值,也要小心是否是引用类型的赋值
- return出来的数据赋值给一个变量的时候,也要小心是否return了一个引用数据类型
二,数组方法
因为系统为了方便我们对数组进行操作,系统提供了一些专业操作数组的方法
对象的方法:对象中的键值对是一个函数
调用方法:对象.方法名()
(一),数组.unshift()
给数组的开头添加一个或多个元素(返回添加以后的新数组的长度)
var arr = ['a', 'b', 'c']
var n = arr.unshift(1)
var n = arr.unshift(1,2,3)
console.log(arr) // [1,2,3,1,'a','b','c']
console.log(n) // 7 number
(二),数组.shift()
给数组的开头删除一个元素,不需要参数(返回条件被删除的元素)
var arr = ['a', 'b', 'c']
var ele = arr.shift
console.log(arr) // ['b','c']
console.log(ele) // a string
(三),数组.push()
给数组的末尾添加一个或多个元素(返回新数组的长度)
var arr = ['a','b','c']
var n = arr.push(1,2,3)
console.log(arr) //['a','b','c',1,2,3]
console.log(n) // 6 number
(四),数组.pop()
给数组末尾删除一个元素,不需要条件值(返回被删除的值)
var arr = ['a','b','c']
var ele = arr.pop()
console.log(arr); // ['a','b']
console.log(ele); // c string
(五),数组.splice()
对数组进行增,删,改的方法
1.删除语法
数组.splice(要删除的元素开始的下标,删除个数) - 【返回被删除的值组成的数组】
var arr = ['a', 'b', 'c', 'd', 'e', 'f']
// 将c和d删除
var brr = arr.splice(2,2)
console.log(arr); // ['a','b','e','f']
console.log(brr); // ['c','d']
2.修改语法
数组.splice(要删除的元素开始下标,删除个数,要放在删除位置的1个或多个值) - 【返回被删掉的元素组成的数组】
在某个位置删除掉元素后,又放上新的元素 - 间接的形成了修改的操作
var arr = ['a', 'b', 'c', 'd', 'e', 'f']
var brr = arr.splice(2,3,1,2,3)
console.log(arr) // ['a', 'b', 1, 2, 3, 'f']
console.log(brr) // ['c', 'd', 'e']
3.添加语法
跟修改语法一样,将删除的个数设置为0 - 【此时删除的个数为0,则默认返回一个空的数组】
var arr = ['a', 'b', 'c', 'd', 'e', 'f']
var brr = arr.splice(2,0,1,2,3)
console.log(arr) //['a', 'b', 1, 2, 3, 'c', 'd', 'e', 'f']
console.log(brr) // []
(五),数组.concat()
将多个数组或元素跟当前数组合并成一个更大的数组,添加一个或多个元素或数组 - 【返回合并以后的大数组】
var arr = ['a','b','c']
需求:合并多个数组
var crr = [1,2,3]
var drr = [7,8,9]
var brr = arr.concat(crr, drr)
console.log(brr); // ['a', 'b', 'c', 1, 2, 3, 7, 8, 9]
(六),数组.sort()
将数组进行排序 - 【返回当前排序后的数组 并将数组从小到大排序】
var arr = [1,5,9,3,4,8,6,2,7]
arr.sort()
console.log(arr) // [1,2,3,4,5,6,7,8,9]
语法二:
数组.sort(function(a,b){a 和 b 这两个自定义参数
return a-b // 表示升序 ,从小到大
return b-a // 表示降序,从大到小
})
var arr = [1,5,9,3,4,8,6,2,7]
arr.sort(function(a,b){
return b-a
})
console.log(arr) // [9,8,7,6,5,4,3,2,1]
(七),数组.reverse()
将数组翻转 - 【返回值是当前数组翻转以后的数组】
var arr = ['a','b','c']
arr.reverse()
console.log(arr) // ['c','b','a']
(八),数组.join()
将数组元素使用指定的连接符号连接成一个字符串 - 返回连接以后的字符串
var arr = ['a','b','c']
// 需求;将数组所有元素使用 - 连接成一个字符串: a-b-c
var str = arr.join('-') // a-b-c
// 连接符指定为空字符串
var str = arr.join('') // abc
// 可以省略连接符,默认使用逗号连接
var str = arr.join() // a,b,c
console.log(str)
(九),数组.slice()
j截取数组,可以将数组中指定的连续的一部分,单独拿出来做为一个新的数组 写入开始小标,和结束下标- 【返回截取的结果,结果中不包含结束下标对应的元素】【左闭右开】
var arr = [1,5,9,3,4,8,6,2,7]
// 需求:获取 3 4 8 这三个元素组成新的数组
var brr = arr.slice(3,6)
console.log(brr) // 3,4,8
三,冒泡排序
原理:每相邻的两个元素进行大小比较,排除合适的顺序
var arr = [4,3,2,1]
// 因为每一轮排序最后都会把最大值放在后面,
// 所以轮到最后一次的话,最后一个值,默认为最小值1,可以省去一次排序
for (var j=0;j<arr.length-1;j++){
for (var i=0;i<arr.length-1-j;i++){
if (arr[i] < arr[i+1]){
// 交换两个数
var tmp = arr[i]
arr[i] = arr[i+1]
arr[i+1] = tmp
}
}
console.log(arr)
}
四,选择排序
原理:每次排序都要找到最小值或者最大值放在最前面
下次排序接着在剩下的数据中找到最小值或者最大值放在前面
var arr = [4,3,2,1]
// 需求:将数组按照升序排列
for (var j=0;j<arr.length-1;j++){ // 循环遍历3轮
for (var i=j+1;i<arr.length;i++){
if (arr[j] > arr[i]){
var tmp = arr[i]
arr[i] = arr[j]
arr[j] = tmp
}
}
}
console.log(arr)
代码思路:
var arr = 【4,3,2,1】
第一轮 j=0 arr[ i ] > arr[ j ]
i=1 4 > 3 arr=[3,4,2,1]
i=2 3 > 2 arr=[2,4,3,1]
i=3 2 > 1 arr=[1,4,3,2]
第二轮 j=1 arr[ i ] > arr[ j ]
i=2 4 > 3 arr=[1,3,4,2]
i=3 3 > 2 arr=[1,2,4,3]
第三轮 j=2 arr[ i ] > arr[ j ]
i=3 4 > 3 arr=[1,2,3,4]