1.对象的遍历
// 例子 var obj = { name:'laozi', age:3000, gender:'男', } // in // alert('username' in obj) // true // alert('gender' in obj) // alert('age' in obj) // alert('class' in obj) // alert('sayHello' in obj) // 用来判断键是否在对象中 结果是布尔类型 for(var i in obj){ // i 是一个临时空间 // 第一次 i name obj['name'] // 第2次 i age obj['age'] // 第3次 i gender obj['gender'] // 第4次 i class obj['class'] // 第5次 i sayhello obj['class'] console.log(i,obj[i]) }
2.数据类型赋值的区别
// var a = 100; //在栈内存开辟一个独立的空间 // var b = a; // 先给b在栈内存开辟一个空间 然后a中的100 给到 b // 两个空间各自独立 //'hello' 100 原数据用不改变 // alert(a); // 100 // alert(b); // 100 // b = 200; // alert(a); //100 修改b 不影响a // alert(b); //200 var a = {name:'**'} // 栈内存中开辟空间 起名a 堆内存开辟空间 var b = a; // 栈内存开辟空间b 堆内存的地址赋值给a a b就同时指向一个堆内存地址 console.log(a.name) console.log(b['name']) b.name = '***' // 所以修改b 就会影响a console.log(a.name) console.log(b['name'])
3.数组
1.创建数组
-
什么是数组?
-
字面理解就是 数字的组合
-
其实不太准确,准确的来说数组是一个 数据的集合
-
也就是我们把一些数据放在一个盒子里面,按照顺序排好
[1, 2, 3, 'hello', true, false]
-
这个东西就是一个数组,存储着一些数据的集合
-
数组内部之间 用, 隔开
数据类型分类
-
number
/string
/boolean
/undefined
/null
/object
/function
/array
/ ... -
数组也是数据类型中的一种
-
我们简单的把所有数据类型分为两个大类 基本数据类型 和 复杂数据类型
-
基本数据类型:
number
/string
/boolean
/undefined
/null
-
复杂数据类型:
object
/function
/array
/ ...
-
数组就是一个
[]
-
在
[]
里面存储着各种各样的数据,按照顺序依次排好
2.字面量创建一个数组
-
直接使用
[]
的方式创建一个数组// 创建一个空数组 var arr1 = [] // 创建一个有内容的数组 var arr2 = [1, 2, 3]
3.内置构造函数创建数组
-
使用 js 的内置构造函数
Array
创建一个数组// 创建一个空数组 var arr1 = new Array() // 创建一个长度为 10 的数组 var arr2 = new Array(10) // 创建一个有内容的数组 var arr3 = new Array(1, 2, 3)
4.数组的 length
-
length: 长度的意思
-
length 就是表示数组的长度,数组里面有多少个成员,length 就是多少
// 创建一个数组 var arr = [1, 2, 3] console.log(arr.length) // 3
5.数组的索引
-
索引,也叫做下标,是指一个数据在数组里面排在第几个的位置
-
注意: 在所有的语言里面,索引都是从 0 开始的
-
在 js 里面也一样,数组的索引从 0 开始
// 创建一个数组 var arr = ['hello', 'world']
-
上面这个数组中,第 0 个 数据就是字符串
hello
,第 1 个 数据就是字符串world
-
想获取数组中的第几个就使用
数组[索引]
来获取var arr = ['hello', 'world'] console.log(arr[0]) // hello console.log(arr[1]) // world
6.数据类型之间储存的区别
-
既然我们区分了基本数据类型和复杂数据类型
-
那么他们之间就一定会存在一些区别
-
他们最大的区别就是在存储上的区别
-
我们的存储空间分成两种 栈 和 堆
-
栈: 主要存储基本数据类型的内容
-
堆: 主要存储复杂数据类型的内容
7.基本数据类型在内存中的存储情况
-
var num = 100
,在内存中的存储情况 -
直接在 栈空间 内有存储一个数据
8.复杂数据类型在内存中的存储情况
-
下面这个 对象 的存储
var obj = { name: 'Jack', age: 18, gender: '男' }
-
复杂数据类型的存储
-
在堆里面开辟一个存储空间
-
把数据存储到存储空间内
-
把存储空间的地址赋值给栈里面的变量
-
-
这就是数据类型之间存储的区别
9.数组的常用方法
-
数组是一个复杂数据类型,我们在操作它的时候就不能再想基本数据类型一样操作了
-
比如我们想改变一个数组
// 创建一个数组 var arr = [1, 2, 3] // 我们想把数组变成只有 1 和 2 arr = [1, 2]
-
这样肯定是不合理,因为这样不是在改变之前的数组
-
相当于心弄了一个数组给到 arr 这个变量了
-
相当于把 arr 里面存储的地址给换了,也就是把存储空间换掉了,而不是在之前的空间里面修改
-
所以我们就需要借助一些方法,在不改变存储空间的情况下,把存储空间里面的数据改变了
-
1.push
push() 添加数据 返回值 是添加数据之后 新数组的长度
2.pop
pop() 删除数据 返回值 是删除的数组的最后的那一个数据
3.unshift
unshift() 添加数据 返回值 是添加数据之后 新数组的长度
4.shift
shift()删除数据 返回值 是删除的数组的第一个数据
5.reverse
不是降序 仅仅是 反转
6.sort
sort() 按照每个数据 一位一位的对比 排序
7.splice
splice() 专门用来截取数组
8.concat
语法: 原始数组.concat(数1, 数2, 数据, ...)
作用: 进行数组拼接, 把参数的所有数组或者数据, 拼接在原始数组身上
返回值: 拼接好的数组
和 push 的区别
改变原始数组
直接改变原始数组
不会改变原始数组
插入数据
直接把数据插入
如果遇到数组, 会把数组拆开, 把每一个数据依次插入
9.join
join() 数组=>字符串
语法: 数组.join('连接符')
作用: 使用连接符, 把数组内的每一个数据连接成一个字符串(不写默认使用 逗号)
返回值: 连接好的字符串
10.slice
语法: 数组.slice(开始索引, 结束索引) [开始的索引,结束的索引)
参数特点:
包前不包后, 包含开始索引位置数据, 不包含结束索引位置数据
开始所以不填, 默认是 0, 结束索引不填, 默认是 length
可以填写负整数, 表示倒数第几个, 其实就是 length + 负整数
作用: 截取数据的部分内容
返回值: 必然是一个新数组
内部就是截取出来的部分内容
和 splcie 的区别
改变原始数组
splice 改变原始数组
slice 不改变原始数组
参数
splice(开始索引, 多少个)
slice(开始索引, 结束索引)
11.indexOf
语法:
数组.indexOf(数据)
数组.indexOf(数据, 开始索引)
作用: 从前到后检索该数据第一次在该数组内出现的位置
返回值:
如果在数组内找到了该数据, 那么就是该数据第一次出现的索引位置
如果在数据内没有找到该数据, 那么就是 -1
12.lastIndexOf
语法:
数组.lastIndexOf(数据)
数组.lastIndexOf(数据, 开始索引)
作用: 从后向前检索该数据第一次在该数组内出现的位置
返回值:
如果在数组内找到了该数据, 那么就是该数据第一次出现的索引位置
如果在数据内没有找到该数据, 那么就是 -1
10.冒泡排序
// 红球 1-33 6个 // 18 2 20 33 1 13 // 蓝球 1-16 1 // 5 // 1 2 13 18 20 33 5 // var balls = [18,2,20,33,1,13] // 1 2 13 18 20 33 // 2 18 20 1 13 33 第一趟 // 2 18 1 13 20 33 第二趟 // 2 1 13 18 20 33 第三趟 // 1 2 13 18 20 33 第四趟 // 好几趟 // 每趟好几次 // 嵌套循环 外边的循环控制趟 // 里边的循环控制 交换次数 // 下一次一定比上一次少一趟 // var a = 10; // var b = 20; // var temp = 0; // temp = a; // a = b; // b = temp; // a = a + b // a = 30 // b = a - b // b = 10 // a = a - b // a = 20 // 长度位6 最多6趟 // 第一趟次数最多 因为是两两比较 最多5次 var balls = [18, 2, 20, 33, 1, 13] for (var i = 0; i < balls.length - 1; i++) { for (var j = 0; j < balls.length - 1 - i; j++) { if (balls[j] > balls[j + 1]) { var num = balls[j]; balls[j] = balls[j + 1]; balls[j + 1] = num; } } document.write(balls + '<br />') } document.write('交换完成以后为' + balls); // 口诀 // 双层for 循环 一层少一次 // 里层减外层 变量相交换