一、严格模式
严格模式是es5中后期添加的的一种语法规范,原因是JS中语法在之前一直处于混杂模式中。
定义严格模式在JS开头书写: "use strict";
严格模式与混杂模式主要有以下五点区别:
- 严格模式中定义变量必须使用变量修饰符;
- 严格模式中八进制必须一0o开头;
- 严格模式中不能删除变量;
- 严格模式中this不能指向window;
- eval有自己的独立作用域。
二、let变量
let变量是ES6中新增的变量修饰符,与var基本上一样都是修饰变量使用,但总体上有以下四点区别
- 在同一作用域下,let不能重复声明;
- 块作用域;
- let不能做变量提升;
- let变量具有暂时性死区。
三、const常量
const常量指的是一经定义就不再改变的量,不能修改、不能删除、也不能重新定义。定义时为了区分变量一般使用大写。
四、模板字符串
使用反引号(``)定义,遇到标识符使用${标识符}
优势:
- 不需要拼接,直接定义;
- 可以识别变量、标识符。
let name = "Tom";
let age = 18;
let school = "清华大学"
//编辑一句话
let str = `我叫${name},今年${age}岁,毕业于${school}`
缺点:运行速度比较慢,在运行的时候需要检测字符串中是否存在标识符,若有还需要进行读取、解析。
五、对象
1、属性的简写
当对象的属性的值是一个标识符并且属性值和属性名保持一致的时候可以省略其一。
let username = "admin";
let password = "123456";
//let user = {
//username : username;
//password:passsword;
//}
//可以简写成以下模式
let user = {username,password}
2、方法的简写
省略function也不用写键名,直接写方法名后面跟上形参列表 、函数体
let obj = {
name : "Tom",
eat :function(){
console.log("我叫"+this.name)
},
say(){
console.log("我叫"+this.name)
}
}
//调用
obj.eat();
obj.say();
3、键名使用标识符
键名如果使用标识符,给该键名加上中括号
let title = "标题";
let content = "内容";
let json = {
[title]:"孙悟空",
[content]:"这是一只猴子"
}
console.log(json)//{标题: "孙悟空", 内容: "这是一只猴子"}
六、解构赋值
结构赋值就是将数组或者字符串中的数据一一取出,然后赋值给一个或者多个变量。
1、数组解构赋值
数组因为是有序的,必须按照顺序一一解构,使用中括号解构
格式: let [变量1,变量2… ] = Array
- 完全解构
定义的变量和数组中的元素相等时数组完全解构
let arr = [1,2,3];
let [a,b,c] = arr;
console.log(a);// 1
console.log(b);// 2
console.log(c);// 3
- 不完全解构
//1、变量少于元素
let arr = [1,2,3];
let [a,b] = arr;
console.log(a);// 1
console.log(b);// 2
//2、变量多于元素,那么多余的变量被赋值为 undefined
let [c,d,e,f] = arr;
console.log(c);// 1
console.log(d);// 2
console.log(e);// 3
console.log(f);// undefined
- 默认值解构
为了避免undefined出现,在定义变量解构赋值前先给变量一个默认值。
注意: 默认值从后往前设定。
let arr = [1,2];
let [a,b,c=0] = arr;
console.log(a);// 1
console.log(b);// 2
console.log(c);// 0
- 占位符解构
避免变量定义过多,使用占位符逗号(,)进行占位
let arr = [66,88,99,11,33,55,77,22,44];
let [,,num] = arr;
console.log(num);// 99
2、字符串解构赋值
解构方式与数组解构方式相同
3、对象解构赋值
用键名进行解构并且键名必须一致。对象是无序的,不用按照顺序解构
语法:let {键名1:键名1…} = Object
- 错误写法
let obj = {
name : "Tom"
};
let {hello:name} = obj;
console.log(name);// undefined
console.log(hello);// hello is not defined
- 正确写法
// 对象解构赋值
let obj = {name : 'Tom',age : 18,sex : '男'}
// 完全解构
// let {name : uname,sex : usex,age : uage} = obj;
// console.log(uname); // Tom
// console.log(uage); // 18
// console.log(usex); //男
// 默认值解构
// let {name : uname,sex : usex,age : uage,address : uaddress = '山东济南'} = obj;
// console.log(uname); // Tom
// console.log(uage); // 18
// console.log(usex); // 男
// console.log(uaddress); // 山东济南
// 简单的结构方式
// let {name:name,age:age,sex:sex} = obj;
// console.log(name); // Tom
// console.log(age); // 18
// console.log(sex); // 男
let {name,age,sex} = obj;
console.log(name); // Tom
console.log(age); // 18
console.log(sex); // 男
4、函数参数解构赋值
- 函数参数是一个数组
function arrayParams([a,b,c] = args){
console.log(a); //66
console.log(b); //88
console.log(c); //99
};
let arr = [66,88,99];
arrayParams(arr);
- 函数参数是一个对象
function objectParams({name,age,sex} = {name : 'Mary',age : 13,sex : '女'}){
console.log(name);
console.log(age);
console.log(sex);
}
let obj = {name : 'Eric',age : 18,sex : '男'};
objectParams(obj);// Eric 18 男
objectParams()// Mary 13 女
#############新入行小白笔记,不喜勿喷。###############