Java Script 学习笔记2 一

147 阅读14分钟

八. 对象

  • 对象是一个复杂数据类型,存储一些基本数据类型的一个集合

  • 这里的 {} 和函数中的 {} 不一样,函数里面的是写代码的,而对象里面是写一些数据的

  • 对象就是一个键值对的集合

  • {} 里面的每一个键都是一个成员,也就是说,我们可以把一些数据放在一个对象里面,那么他们就互不干扰了

  • 其实就是我们准备一个房子,把我们想要的数据放进去,然后把房子的地址给到变量名,当我们需要某一个数据的时候,就可以根据变量名里面存储的地址找到对应的房子,然后去房子里面找到对应的数据

8-1 创建对象

  • 字面量的方式创建一个对象 var obj = {}
  • 内置构造函数的方式创建对象 var obj = new Object()

8-2 对象的基本操作

增 查 改 删

8-3 对象的遍历

8-4 数据类型之间存储的区别

  • 既然我们区分了基本数据类型和复杂数据类型
  • 那么他们之间就一定会存在一些区别
  • 他们最大的区别就是在存储上的区别
  • 我们的存储空间分成两种
    • 栈: 主要存储基本数据类型的内容
    • 堆: 主要存储复杂数据类型的内容

基本数据类型在内存中的存储情况

  • var num = 100,在内存中的存储情况
  • 直接在 栈空间 内有存储一个数据

复杂数据类型在内存中的存储情况

  • 复杂数据类型的存储

    1. 在堆里面开辟一个存储空间
    2. 把数据存储到存储空间内
    3. 把存储空间的地址赋值给栈里面的变量
  • 这就是数据类型之间存储的区别

数据类型之间的比较

  • 基本数据类型是 之间的比较
  • 复杂数据类型是 地址 之间的比较

九. 数组

  • 字面理解就是 数字的组合,准确的来说数组是一个 数据的集合

  • 把一些数据放在一个盒子里面,按照顺序排好

    [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 数组的排序

  • 排序,就是把一个乱序的数组,通过我们的处理,让他变成一个有序的数组

冒泡排序

冒泡.gif

  • 先遍历数组,让挨着的两个进行比较,如果前一个比后一个大,那么就把两个换个位置
    • 数组遍历一遍以后,那么最后一个数字就是最大的那个了
  • 然后进行第二遍的遍历,还是按照之前的规则,第二大的数字就会跑到倒数第二的位置
  • 以此类推,最后就会按照顺序把数组排好了

选择排序

选择.gif

  • 先假定数组中的第 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显示字符.png
  • ASCII控制字符.png
  • 上面的就是 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. 传递两个数字,第一个表示年,第二个表示月份

    2. 传递三个数字,前两个不变,第三个表示该月份的第几天,从 1 到 31

    3. 传递四个数字,前三个不变,第四个表示当天的几点,从 0 到 23

    4. 传递五个数字,前四个不变,第五个表示的是该小时的多少分钟,从 0 到 59

    5. 传递六个数字,前五个不变,第六个表示该分钟的多少秒,从 0 到 59

    6. 传入字符串的形式

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 秒钟以后执行函数
    • 只执行一次,就不再执行了
    • 返回值是,当前这个定时器是页面中的第几个定时器

13-2 间隔定时器

  • 每间隔多少时间就执行一次函数

  • 语法: setInterval(要执行的函数,间隔多少时间)

    • 时间和刚才一样,是按照毫秒进行计算的
      • 每间隔 1 秒钟执行一次函数
      • 只要不关闭,会一直执行
    • 返回值是,当前这个定时器是页面中的第几个定时器

13-3 定时器的返回值

  • 设置定时器的时候,他的返回值是部分 setTimeoutsetInterval

  • 只要有一个定时器,那么就是一个数字

13-4 关闭定时器

  • timerId,是表示这个定时器是页面上的第几个定时器

  • 这个 timerId 就是用来关闭定时器的数字

  • 关闭定时器的两个方法 clearTimeoutclearInterval

  • 原则上是

    • clearTimeout 关闭 setTimeout
    • clearInterval 关闭 setInterval
  • 但是其实是可以通用的,他们可以混着使用

    var timerId = setTimeout(function () {
      console.log('倒计时定时器')
    }, 1000)
    clearTimeout(timerId)
    
      var timerId2 = setInterval(function () {
      console.log('间隔定时器')
    }, 1000)
    coearInterval(timerId2)
    

案例:倒计时