八. 对象
-
对象是一个复杂数据类型,存储一些基本数据类型的一个集合
-
这里的
{}和函数中的{}不一样,函数里面的是写代码的,而对象里面是写一些数据的 -
对象就是一个键值对的集合
-
{}里面的每一个键都是一个成员,也就是说,我们可以把一些数据放在一个对象里面,那么他们就互不干扰了 -
其实就是我们准备一个房子,把我们想要的数据放进去,然后把房子的地址给到变量名,当我们需要某一个数据的时候,就可以根据变量名里面存储的地址找到对应的房子,然后去房子里面找到对应的数据
8-1 创建对象
- 字面量的方式创建一个对象 var obj = {}
- 内置构造函数的方式创建对象 var obj = new Object()
8-2 对象的基本操作
增 查 改 删
8-3 对象的遍历
8-4 数据类型之间存储的区别
- 既然我们区分了基本数据类型和复杂数据类型
- 那么他们之间就一定会存在一些区别
- 他们最大的区别就是在存储上的区别
- 我们的存储空间分成两种 栈 和 堆
- 栈: 主要存储基本数据类型的内容
- 堆: 主要存储复杂数据类型的内容
基本数据类型在内存中的存储情况
var num = 100,在内存中的存储情况- 直接在 栈空间 内有存储一个数据
复杂数据类型在内存中的存储情况
-
复杂数据类型的存储
- 在堆里面开辟一个存储空间
- 把数据存储到存储空间内
- 把存储空间的地址赋值给栈里面的变量
-
这就是数据类型之间存储的区别
数据类型之间的比较
- 基本数据类型是 值 之间的比较
- 复杂数据类型是 地址 之间的比较
九. 数组
-
字面理解就是 数字的组合,准确的来说数组是一个 数据的集合
-
把一些数据放在一个盒子里面,按照顺序排好
[1, 2, 3, 'hello', true, false] -
这个东西就是一个数组,存储着一些数据的集合
数据类型分类
-
number/string/boolean/undefined/null/object/function/array/ ... -
数组也是数据类型中的一种
-
我们简单的把所有数据类型分为两个大类 基本数据类型 和 复杂数据类型
-
基本数据类型:
number/string/boolean/undefined/null -
复杂数据类型:
object/function/array/ ...
9-1 创建一个数组
- 数组就是一个
[] - 在
[]里面存储着各种各样的数据,按照顺序依次排好
字面量创建一个数组
- 直接使用
[]的方式创建一个数组
内置构造函数创建数组
- 使用
js的内置构造函数Array创建一个数组
9-2 数组的 length
length: 长度的意思length就是表示数组的长度,数组里面有多少个成员,length就是多少
9-3 数组的索引
- 索引,也叫做下标,是指一个数据在数组里面排在第几个的位置
- 注意: 在所有的语言里面,索引都是从 0 开始的
- 在
js里面也一样,数组的索引从0开始 - 想获取数组中的第几个就使用
数组[索引]来获取
9-4 数组的排序
- 排序,就是把一个乱序的数组,通过我们的处理,让他变成一个有序的数组
冒泡排序
- 先遍历数组,让挨着的两个进行比较,如果前一个比后一个大,那么就把两个换个位置
- 数组遍历一遍以后,那么最后一个数字就是最大的那个了
- 然后进行第二遍的遍历,还是按照之前的规则,第二大的数字就会跑到倒数第二的位置
- 以此类推,最后就会按照顺序把数组排好了
选择排序
-
先假定数组中的第 0 个就是最小的数字的索引
-
然后遍历数组,只要有一个数字比我小,那么就替换之前记录的索引
-
直到数组遍历结束后,就能找到最小的那个索引,然后让最小的索引换到第 0 个的位置
-
再来第二趟遍历,假定第 1 个是最小的数字的索引
-
在遍历一次数组,找到比我小的那个数字的索引
-
遍历结束后换个位置
-
依次类推,也可以把数组排序好
9-5 数组的常用方法
- 数组是一个复杂数据类型,我们在操作它的时候就不能再向基本数据类型一样操作了
数组常用方法之 push
push是用来在数组的末尾追加一个元素
数组常用方法之 pop
pop是用来删除数组末尾的一个元素
数组常用方法之 unshift
unshift是在数组的最前面添加一个元素
数组常用方法之 shift
shift是删除数组最前面的一个元素
数组常用方法之 splice
-
splice是截取数组中的某些内容,按照数组的索引来截取 -
语法:
splice(从哪一个索引位置开始,截取多少个,替换的新元素)(第三个参数可以不写)
数组常用方法之 reverse
reverse是用来反转数组使用的
数组常用方法之 sort
sort是用来给数组排序的
数组常用方法之 concat
-
concat是把多个数组进行拼接 -
和之前的方法有一些不一样的地方,就是
concat不会改变原始数组,而是返回一个新的数组- 注意:
concat方法不会改变原始数组
- 注意:
数组常用方法之 join
-
join是把数组里面的每一项内容链接起来,变成一个字符串 -
可以自己定义每一项之间链接的内容
join(要以什么内容链接) -
不会改变原始数组,而是把链接好的字符串返回
- 注意: join 方法不会改变原始数组,而是返回链接好的字符串
数组常用方法之 indexOf
-
indexOf用来找到数组中某一项的索引 -
语法:
indexOf(你要找的数组中的项)- 我们要找的是数组中值为 3 的那一项
- 返回的就是值为 3 的那一项在该数组中的索引
- 返回的是索引
-
如果你要找的内容在数组中没有,那么就会返回 -1
数组常用方法之 forEach
-
和
for循环一个作用,就是用来遍历数组的 -
语法:
arr.forEach(function (item, index(索引), arr) {})forEach()的时候传递的那个函数,会根据数组的长度执行- 数组的长度是多少,这个函数就会执行多少回
数组常用方法之 map
- 和
forEach类似,只不过可以对数组中的每一项进行操作,返回一个新的数组
数组常用方法之 filter
-
和
map的使用方式类似,按照我们的条件来筛选数组 -
把原始数组中满足条件的筛选出来,组成一个新的数组返回
- 我们设置的条件就是
> 1 - 返回的新数组就会是原始数组中所有
> 1的项
- 我们设置的条件就是
every 每一个
some 只要一个满足条件
find 同filter
十. 字符串
10-1 创建字符串
- 我们创建字符串也分为两种方法 字面量 和 构造函数
10-2 字符集
ASCII 字符集
- 我们都知道,计算机只能存储
0101010这样的二进制数字 - 那么我们的
a ~ z/A ~ Z/$/@/… 之类的内容也有由二进制数字组成的 - 我们可以简单的理解为,
a ~ z/A ~ Z/$/@/… 之类的内容都有一个自己的编号,然后在计算机存储的时候,是存储的这些编号,我们看的时候,也是通过这些编号在解析成我们要看到的内容给我们看到 - 上面的就是 ASCII 对照表,我们只需要知道他是这么存储的就好
unicode 编码
- 我们看到了,
ASCII只有这128个字符的编码结构 - 但是因为
ASCII出现的比较早,而且是美国发明的,早先时候这些内容就够用了 - 因为存储一些英文的内容,传递一些英文的文章什么的都够用了
- 那么对于这个世界来说肯定是不够用的
- 因为我们的汉字没有办法存储,包括一些其他国家的语言也没有办法存储
- 所以就出现了
unicode编码,也叫(万国码,统一码) unicode对照表就是一个和ASCII一样的对照表,只不过变得很大很大,因为存储的内容特别的多- 而且包含了世界上大部分国家的文字,所以我们的文字和字符现在在存储的时候,都是按照
unicode编码转换成数字进行存储 - 我们的
UTF-8就是一种8 位的 unicode字符集
10-3 字符串的常用方法
- 我们操作字符串,也有一堆的方法来帮助我们操作
- 字符串和数组有一个一样的地方,也是按照索引来排列的
charAt
-
charAt(索引)是找到字符串中指定索引位置的内容返回- 因为字符串也是按照索引进行排列的,也是同样从 0 开始
- 所以索引 2 的位置就是
c
-
如果没有对应的索引,那么就会返回 空字符串
charCodeAt
charCodeAt(索引)就是返回对应索引位置的unicode编码
indexOf
indexOf就是按照字符找到对应的索引
substring
-
substring是用来截取字符串使用的 -
语法:
substring(从哪个索引开始,到哪个索引截止),包含开始索引,不包含结束索引
substr
-
substr也是用来截取字符串的 -
语法:
substr(从哪个索引开始,截取多少个)
toLowerCase 和 toUpperCase
- 这两个方法分别使用用来给字符串转成 小写字母 和 大写字母 的
replace
替换,只能替换第一个
split
分割,join
indexOf lastIndexOf
concat
同"+"一样
trim
- 去掉首尾空格
10-4 json字符串
模板字符串
十一 数字处理————Math
-
Math 是 js 的一个内置对象,提供了一堆的方法帮助我们操作 数字
-
Number中toFixed的使用
sum.toFixed()是将一个小数 四舍五入 保留几个小数位
-
数学方法Math
11-1 random
-
Math.random()这个方法是用来生成一个0 ~ 1之间的随机数 -
每次执行生成的数字都不一样,但是一定是
0 ~ 1之间的 -
生成的数字包含 0 ,但是不包含 1
11-2 round
Math.round()是将一个小数 四舍五入 变成一个整数
11-3 abs
Math.abs()是返回一个数字的 绝对值
11-4 ceil
Math.ceil()是将一个小数 向上取整 得到的整数
11-5 floor
Math.floor()是将一个小数 向下取整 的到的整数
11-6 max
Math.max()得到的是你传入的几个数字之中 最大 的那个数字
11-7 min
Math.min()得到的是你传入的几个数字之中 最小 的那个数字
11-8 sqrt 平方根
- sqrt是算术平方根(正),参数为负,输出NaN
11-9 pow 底数,指数
11-10 PI
-
Math.PI得到的是π的值,也就是3.1415936...- 因为计算机的计算精度问题,只能得到小数点后 15 位
- 使用 Math.PI 的时候,是不需要加 () 的
十二. 时间Date
js提供的内置构造函数,专门用来获取时间的
12-1 new Date()
-
new Date()在不传递参数的情况下是默认返回当前时间 -
new Date()在传入参数的时候,可以获取到一个你传递进去的时间 -
new Date()传递的参数有多种情况-
传递两个数字,第一个表示年,第二个表示月份
-
传递三个数字,前两个不变,第三个表示该月份的第几天,从 1 到 31
-
传递四个数字,前三个不变,第四个表示当天的几点,从 0 到 23
-
传递五个数字,前四个不变,第五个表示的是该小时的多少分钟,从 0 到 59
-
传递六个数字,前五个不变,第六个表示该分钟的多少秒,从 0 到 59
-
传入字符串的形式
-
12-2 将日期字符串格式化成指定内容
- 比如我们得到的时间字符串是
Sun Feb 03 2019 13:13:13 GMT+0800 (中国标准时间) - 我指向得到这个日期中是那一年,我们就要靠截取字符串的形式得到
- 但是现在
js为我们提供了一系列的方法来得到里面的指定内容
1. getFullYear
getFullYear()方式是得到指定字符串中的哪一年
2. getMonth
-
getMonth()方法是得到指定字符串中的哪一个月份- 这里要有一个注意的地方
- 月份是从 0 开始数的
- 0 表示 1月,1 表示 2月,依此类推
3. getDate
getDate()方法是得到指定字符串中的哪一天
4.getDay
getDay()方法是得到指定字符串当前日期是一周中的第几天(周日是 0,周六是 6)
5.getHours
getHours()方法是得到指定字符串中的哪小时
6.getMinutes
getMinutes()方法是得到指定字符串中的哪分钟
7.getSeconds
getSeconds()方法是得到指定字符串中的哪秒钟
8.getTime
getTime()``getMilliseconds()方法是得到执行时间到格林威治时间的毫秒数
9.获取时间差
- 是指获取两个时间点之间相差的时间
- 在 js 中是不能用时间直接做 减法 的
- 我们需要一些特殊的操作
- 在编程的世界里面,有一个特殊的时间,是
1970年01月01日00时00分00秒 - 这个时间我们叫做
格林威治时间 - 所有的编程世界里面,这个时间都是一样的,而且
格林威治时间的数字是 0 - 从
格林威治时间开始,每经过1毫秒,数字就会 + 1 - 所以我们可以获取到任意一个时间节点到
格林威治时间的毫秒数 - 然后在用两个毫秒数相减,就能得到两个时间点之间相差的毫秒数
- 我们在通过这个毫秒数得到准确的时间
十三. 定时器
- 在
js里面,有两种定时器,倒计时定时器 和 间隔定时器
13-1 倒计时定时器
-
倒计时多少时间以后执行函数
-
语法:
setTimeout(要执行的函数,多长时间以后执行) -
会在你设定的时间以后,执行函数
- 时间是按照毫秒进行计算的,1000 毫秒就是 1秒钟
- 所以会在页面打开 1 秒钟以后执行函数
- 只执行一次,就不再执行了
- 返回值是,当前这个定时器是页面中的第几个定时器
- 时间是按照毫秒进行计算的,1000 毫秒就是 1秒钟
13-2 间隔定时器
-
每间隔多少时间就执行一次函数
-
语法:
setInterval(要执行的函数,间隔多少时间)- 时间和刚才一样,是按照毫秒进行计算的
- 每间隔 1 秒钟执行一次函数
- 只要不关闭,会一直执行
- 返回值是,当前这个定时器是页面中的第几个定时器
- 时间和刚才一样,是按照毫秒进行计算的
13-3 定时器的返回值
-
设置定时器的时候,他的返回值是部分
setTimeout和setInterval的 -
只要有一个定时器,那么就是一个数字
13-4 关闭定时器
-
timerId,是表示这个定时器是页面上的第几个定时器 -
这个
timerId就是用来关闭定时器的数字 -
关闭定时器的两个方法
clearTimeout和clearInterval -
原则上是
clearTimeout关闭setTimeoutclearInterval关闭setInterval
-
但是其实是可以通用的,他们可以混着使用
var timerId = setTimeout(function () { console.log('倒计时定时器') }, 1000) clearTimeout(timerId) var timerId2 = setInterval(function () { console.log('间隔定时器') }, 1000) coearInterval(timerId2)