1. 严格模式
1.1 严格模式的使用方法
使用方法1:"use strict"; 开启严格模式。
使用方法2:<script type="moaule"></script> 当设置script标签为模块化时,自动启用严格模式。
1.2 严格模式的限制
1. 要求变量不能重名。
//报错
"use strict";
var a=2;
var a=4;
2. 函数中的参数不能同名。
//报错
"use strict";
function fn(a, a) {
};
fn(1, 2);
3. 在不声明变量的情况下使用变量,是不允许的。
"use strict";
x = 3.14; // 会引发错误(x 未定义)
4. 对象也是变量,在不声明对象的情况下使用对象也是不允许的。
"use strict";
x = { p1: 10, p2: 20 }; // 这将引发错误
5. 删除变量(或对象)是不允许的。
"use strict";
var x = 3.14;
delete x; // 这将引发错误
6. 删除函数是不允许的。
"use strict";
function x(p1, p2) { };
delete x;// 这将引发错误
7. 八进制数值文本是不允许的。
"use strict"; var x = 010; // 这将引发错误8. 使用转义字符是不允许的。
"use strict"; var x = \010;// 这将引发错误9.写入只读属性是不允许的。
"use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14;// 这将引发错误10.写入只能获取的属性是不允许的。
"use strict"; var obj = {get x() {return 0} }; obj.x = 3.14;// 这将引发错误11. 删除不可删除的属性是不允许的。
"use strict"; delete Object.prototype; // 这将引发错误12. 字符串 "eval" 和 "arguments" 不可用作变量。
"use strict"; var eval = 3.14;// 这将引发错误"use strict"; var arguments = 3.14;// 这将引发错误
1.3 在严格模式下this的指向
查看day10JS-this的使用情况。
1.4 执行函数的方式有哪些?
- 函数名(); ---> 例如:fn();
- new 函数名(); ---> 例如:new fn();
- 函数名.call(); ---> 例如: fn.call()
- 函数名.apply(); ---> 例如: fn.apply();
1.5 call()方法 /apply()方法
call(); 方法 /apply(); 方法 :当执行函数时,将函数中 this 指向为call中第一个参数。开启严格模式也不会影响this的指向。这两个方法的作用就是改变this的指向。
function fn() {
console.log(this);
}
let object = { a: 1 };
fn.call(object);
fn.apply(object);
1.5 call()方法 /apply()方法的区别:
call()方法 :call传参是一个个传。例如: fn.call(object,1,2);
apply()方法 :apply传参传入数组。例如:fn.apply(object,[1,2]);
2. 解构赋值
2.1 数组的补充知识
1. 数组的最后一个元素是空元素,那么它不作为数组的元素,length的长度不加上空元素的长度。
2. 空元素不等于undefined。
补充知识1的案例:
//补充知识1的案例:
var arr = [1, 2,];
console.log(arr);
console.log(arr.length);//2
补充知识2的案例:
var arr = [1, 2, , 3, undefined, 4];
console.log(arr.length);//6
for循环
2.2 解构赋值的用途与使用方法
解构赋值主要用于数组解构和对象解构。
使用方法:let [a,b]=[1,2];
2.3 解构赋值使用语法
对象解构:
-------------
3. Set(集合)与Map(映射)
3.1 Array与Object
Array:是紧密结构,使用下标存储数据,存储的数据可以重复,无序存储(不会自动排序)可以手动排序,不关心key只关心存储的值。查询速度慢、添加删除速度慢 。
Object : 是松散结构,以键值对形式(key->value)存储,存储key不能重复,value值是可以重复,无序存储并且不能排序,查找速度快,可以直接根据key找到对应value值,添加删除速度快。无法获取对象的数据长度。key要求必须是字符串或者symbol,如惠不是就会自动隐式转换为字符串 。
3.2 Set(集合)与Map(映射)
Set集合:松散结构,没有key,只有value的集合,数据不能重复(唯一),不能排序插入删除速度快,可以得到集合中数据的长度,可以遍历,查找速度快 。
Map映射:松散结构,键值对形式存储,查找和添加删除速度快,不能排序,可以获取到数据存储的长度,key可以是任何类型 松散结构,键值对形式存储,查找和添加删除速度快,不能排序,可以获取到数据存储的长度,Key可以是任何类型。
3.3 迭代器
- HTMLCollection
- NodeList
- arguments
- Array
- Set本身也是迭代器。
4. Set集合的方法
let s = new Set([1,2,3,4])
console.log(s);
- add() : 添加。
- delete() : 删除。
- has() : 判断某值在集合中是否存在。
- clear() : 清除集合中所有的数据。
5. Set集合的使用场景
5.1 去重
使用Set去重的缺点:
5.2 减少查找