let
变量声明不可重复
块级作用域 (if else while for)
不存在变量提升
不影响作用域链
const
一定要赋初始值
不能修改值
一般常用大写
块级作用域
对于数组和对象来说,不算做对常量的修改,不会报错。(常量所指向的地址没有发生改变)
解析赋值
寻找同名属性进行赋值
允许按照一定模式从数组或对象中提取值,对变量进行赋值
const arr = ['lyz', 'my', 'lyj'];
let [z, y, j] = arr;
console.log(z); //lyz
console.log(y);//my
console.log(j); //lyj
const obj = {
name: 'lyz',
age: 21,
say: function () {
console.log('hi');
}
}
let {name, age, say} = obj;
console.log(name); //lyz
console.log(age); //21
say() //hi
模版字符串
内容中可以出现换行
let demo = `<ul>
<li></li>
</ul>`
变量拼接
let uname = 'lyz';
let model = `${uname}是我`;
console.log(model); //lyz是我
箭头函数
- this是静态的,始终指向函数声明时所在作用域下的this指向。
- 不能作为构造函数的实例化对象
- 没有自己的this 不能使用arguments
- 省略花括号,当代码只有一条语句的时候,return必须省略,而且语句的执行结果就是函数的返回值。
- 箭头函数一般适用于与this指向无关的回调、定时器、数组的方法回调;不适用于与this有关的回调,事件回调,对象方法。
let fn = () => {
console.log('箭头函数');
}
fn()
var name = 'lyz';
const obj = {name: 'my'};
function getName(){
console.log(this.name);
}
let getName2 = () => {
console.log(this.name);
}
//直接调用
getName();
getName2();
//call方法调用
getName.call(obj);
getName2.call(obj);
let f = n => n * n;
console.log(f(9));
const arr = [2, 4, 3, 6, 8,31];
const result = arr.filter(item => item % 2 === 0);
console.log(result); //[2,4,6,8]
函数参数赋值
形参初始值。具有默认值的参数,一般靠后。
与解析赋值结合
reset参数
用于获得函数的实参,用来替代arguments(形参位置)。
function fn(...args) {
console.log(args);//["lyz", "my"]
}
fn('lyz', 'my')
function fn1(a, b, ...args) {
console.log(a);//1
console.log(b);//2
console.log(args);//[3, 4, 5]
}
fn1(1, 2, 3, 4, 5)
扩展运算符
将数组转化为以逗号形式分割的参数序列
var arr = ['lyz', 'my', 'lyj'];
function f() {
console.log(arguments); //Arguments ["lyz", "my", "lyj"]
}
f(...arr)
数组合并
var arr2 = ['lyf', 'glnz'];
var newArr = [...arr, ...arr2];
console.log(newArr); //["lyz", "my", "lyj", "lyf", "glnz"]
数组克隆
var arr2 = ['lyf', 'glnz'];
var arr3 = [...arr2];
console.log(arr3); //["lyf", "glnz"]
将伪数组转化为真正的数组
var div = document.querySelectorAll('div');
var arrDiv = [...div];