ES6(2) 一些方法的补充

118 阅读3分钟

1. this

  1. this指向 (给谁绑定的事件/方法 谁就是this)
    1. 事件处理函数中 this -> 绑定事件的DOM元素
    2. 在自定义函数中 this -> window
    3. 定时器中 this -> window
    4. 在自定义对象中 this -> 对象
    5. 在类中 this -> 实例化的对象
  2. 改变this指针的方法:
    1. call 参数是多个 第一个参数是要改变的指针 后面的所有的参数都是方法的实参 方法会自动触发
    2. apply 参数是2个 第一个参数是要改变的指针 第二个参数是一个数组,数组的每一项就是方法的实参 方法会自动触发
    3. bind 参数是多个 第一个参数是要改变的指针 后面的所有的参数都是方法的实参 但是方法不会自动执行
    fn.call(oDiv, 1, 2);

    fn.apply(oDiv,[1,2])

    fn.bind(oDiv,1,2)()

2. 箭头函数

一、普通函数 =>箭头函数
1.去掉 function 关键字
2.在()和{} 之间加 =>

二、箭头函数:
1.函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(箭头函数内部的this指向的是父作用域中的this)
2.不可以当作构造函数(类),也就是说,不可以使用new命令,否则会抛出一个错误。
3.不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替

    let fn = (...rest) => {
      console.log(...rest)
      // console.log(arguments) //    <-------不可用
    } 

    fn(1,2,3) // 1,2,3

3. 关于数值的一些方法

  1. Number.isFinite 判断是否是数值 => boolean
  2. Number.isNaN 判断是否是NAN => boolean
  3. Number.isInteger 判断是否是整数 => boolean
  4. Number.parseFloat解析一个字符串并返回一个浮点数(6.0返回6 a6返回NaN)
  5. Number.parseInt解析一个字符串并返回一个整数(a6返回NaN)
  6. Math.trunc去除一个数的小数部分
  7. Math.sign判断一个数是正数 负数 或者 零(正数返回1、负数 返回-1、 0返回0、 -0返回0)
  8. Math.random()生成随机数 <--------最常用

4. 关于字符串的一些方法

  1. indexOf 查找字符串 返回首次出现的索引 没有找到返回-1
  2. includes 查找字符串 如果存在 返回true 否则返回false
  3. startsWith判断查询的字符串是否是原字符串的开始 => boolean
  4. endsWith判断查询的字符串是否是原字符串的结尾 => boolean

5. 字符串的拼接

反引号括起来,变量用${ }包裹

`我的名字是:${name}我的年龄是:${age}`

常亮部分用引号括起来,用加号拼接

'我的名字是:' + name + '我的年龄是:' + age

6. 关于数组的一些方法

  1. Array.of定义数组,可定义只包含一个值的数组
数组的普通定义方法,当只有一个值时默认定义一个长度为该值的空数组  
let a1 = new Array(2,3,4)  // 长度为3的空数组 let a1 = [2,3,4]  
let a2 = new Array(2) // 长度为2的空数组 let a2 = [,]  
若想定义只包含一个值的数组可通过Array.of方法
console.log(Array.of(2)); // [2]  
console.log(Array.of(2,3,4)); // [2,3,4]
  1. Array.from 可以将类数组转换成数组
  2. copyWithin(target, start, end) 会改变原有数组
    (三个参数都表示的是数组的索引下标)
    target 表示从下标为target开始替换内容
    替换的内容为从start开始获取到end之前(不包含end)结束
let a5 = [1,2,3,4,5,6]
    console.log(a5); // [1,2,3,4,5,6]
    console.log(a5.copyWithin(1,4)); // [1,5,6,4,5,6]<-----已将原数组改变
    console.log(a5.copyWithin(2,3,4)) // [1,5,4,4,5,6]<-----在前者改变过的基础上改变
  1. find 返回第一个满足条件数组成员
  2. findIndex 返回第一个满足条件的数组成员的索引
  3. includes 数组是否包含内容 => boolean(字符串也有此方法)
  4. fill( 覆盖的数值, 从索引为几开始 )对数组进行填充,如果原数组不为空 会覆盖原数组
 console.log(['a', 'b', 'c'].fill(7)) // [7,7,7]
 console.log(['a', 'b', 'c'].fill(7, 1)) // ['a', 7, 7]

7. 数组的遍历

  1. for of
for(let [index, value] of list.entries()) {
       console.log(index)
       console.log(value)
     }
  1. forEach 数组的遍历 没有返回值
list.forEach((value, index) => {
      value.age = value.age + 1
      console.log(value)
    })
console.log(list)
  1. map filter 数组的遍历 有返回值 不改变原数组
    map返回booler值
    filter返回符合条件的数组(过滤)
let list1 = list.map((p1, index) => {
       if (p1.age > 20) {
        return p1.name
       }
      return age > 20
    })
console.log(list1)
let list2 = list.filter((obj, index) => {
      return obj.age > 19
    })
console.log(list2)

8. 对象

let name = 'gs';  
let age = 21;  

let person = {  
  name: name,  
  age: age,  
  eat: function() {  
    console.log(`${this.name} is eating....`);  
&nbsp;&nbsp;&nbsp;  }  
}  
  1. 当对象的属性值是一个变量,并且变量的名称与属性名相同就可以简写属性
let p1 = {  
      name,  
      age,  
      eat() {  
        console.log(`${this.name} is eating....`);  
     &nbsp;&nbsp;&nbsp; }   
    }  
  1. 当属性名是变量时要用中括号[]将属性名括起来
let xxx = 'cname';  

    let p2 = {  
      [xxx]: 'zs',  
    }
  1. Object.is() 判断是否严格相等 ===
console.log(+0 === -0) // true
    console.log(Object.is(+0, -0)) // false
    console.log(NaN === NaN) // false
    console.log(Object.is(NaN, NaN)) //true
  1. Object.assign对象的合并
    浅拷贝:
    let obj3 = Object.assign(obj1, obj2)

    console.log(Object.keys(obj3)) // => [key, key]
    console.log(Object.values(obj3)) // => [value, value]
    console.log(Object.entries(obj3)) // => [[key,value],[key,value]]

     深拷贝(将要合并的数组与空数组合并):

    let obj4 = Object.assign({},obj1, obj2)