1. this
- this指向 (给谁绑定的事件/方法 谁就是this)
- 事件处理函数中 this -> 绑定事件的DOM元素
- 在自定义函数中 this -> window
- 定时器中 this -> window
- 在自定义对象中 this -> 对象
- 在类中 this -> 实例化的对象
- 改变this指针的方法:
- call 参数是多个 第一个参数是要改变的指针 后面的所有的参数都是方法的实参 方法会自动触发
- apply 参数是2个 第一个参数是要改变的指针 第二个参数是一个数组,数组的每一项就是方法的实参 方法会自动触发
- 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. 关于数值的一些方法
- Number.isFinite 判断是否是数值 => boolean
- Number.isNaN 判断是否是NAN => boolean
- Number.isInteger 判断是否是整数 => boolean
- Number.parseFloat解析一个字符串并返回一个浮点数(6.0返回6 a6返回NaN)
- Number.parseInt解析一个字符串并返回一个整数(a6返回NaN)
- Math.trunc去除一个数的小数部分
- Math.sign判断一个数是正数 负数 或者 零(正数返回1、负数 返回-1、 0返回0、 -0返回0)
- Math.random()生成随机数 <--------最常用
4. 关于字符串的一些方法
- indexOf 查找字符串 返回首次出现的索引 没有找到返回-1
- includes 查找字符串 如果存在 返回true 否则返回false
- startsWith判断查询的字符串是否是原字符串的开始 => boolean
- endsWith判断查询的字符串是否是原字符串的结尾 => boolean
5. 字符串的拼接
反引号括起来,变量用${ }包裹
`我的名字是:${name}我的年龄是:${age}`
常亮部分用引号括起来,用加号拼接
'我的名字是:' + name + '我的年龄是:' + age
6. 关于数组的一些方法
- 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]
- Array.from 可以将类数组转换成数组
- 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]<-----在前者改变过的基础上改变
- find 返回第一个满足条件数组成员
- findIndex 返回第一个满足条件的数组成员的索引
- includes 数组是否包含内容 => boolean(字符串也有此方法)
- fill( 覆盖的数值, 从索引为几开始 )对数组进行填充,如果原数组不为空 会覆盖原数组
console.log(['a', 'b', 'c'].fill(7)) // [7,7,7]
console.log(['a', 'b', 'c'].fill(7, 1)) // ['a', 7, 7]
7. 数组的遍历
- for of
for(let [index, value] of list.entries()) {
console.log(index)
console.log(value)
}
- forEach 数组的遍历 没有返回值
list.forEach((value, index) => {
value.age = value.age + 1
console.log(value)
})
console.log(list)
- 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....`);
}
}
- 当对象的属性值是一个变量,并且变量的名称与属性名相同就可以简写属性
let p1 = {
name,
age,
eat() {
console.log(`${this.name} is eating....`);
}
}
- 当属性名是变量时要用中括号[]将属性名括起来
let xxx = 'cname';
let p2 = {
[xxx]: 'zs',
}
- 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
- 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)