let/const
- 块作用域里,和函数作用域类似,存在变量提升
let/const作用于块作用域
let也存在变量提升,但是 JS 不允许你在声明语句前使用,声明语句前都是暂时性死区
const声明必须赋值,普通值不可被修改,引用类型的值不可修改引用指向,但是可以对其中的属性修改
let/const 可以替换掉var
console.log(name)
var name =1
{
console.log(name)
let name =2
}
console.log(name)
const a
const b =1
const obj = {a: 1}
obj = {b: 1}
const arr= [1,2]
arr[1]=3
解构
- 数组可以占位解构,注意严格和位置有关
- 对象和位置无关,和属性名称有关,可以重命名属性名称,也可解析嵌套结构
const [a, , c] = [1, 2, 3];
const { name, age: newAge } = { age: 10, name: "yan" };
console.log(newAge);
const school = {
classes: {
stu: { name: "Bob", age: 24 }
}
};
const {
classes: {
stu: { name, age }
}
} = school;
console.log(age);
扩展运算符...
- 对象中的扩展运算符,常用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
- 数组中扩展运算,可以将一个数组转为用逗号分隔的参数序列,一般用途如下:
- 把数组变成函数的参数
- 合并数组
- 利用 rest 参数(把零散的参数合并成一个数组,很适合用来处理参数不固定)
- 把类数组(类数组是有 length 属性的对象)转化为数组
const me = { name: "yan", age: 24 };
const meCopy = { ...me };
console.log(meCopy);
console.log(...["ha", "he", "xi"]);
function multiple(x, y) {
return x * y;
}
const arr = [2, 3];
multiple(...arr);
const arr1 = [1, 2, 3, 4];
const arr2 = [5, 6, 7, 8];
const newArr = [...arr1, ...arr2];
function add(...args) {
let result = 0;
for (var val of args) {
result += val;
}
return result;
}
add(1, 2, 3, 4);
const arrayLike = { 0: "Bob", 1: "Lucy", 2: "Daisy", length: 3 };
const arr = [...arrayLike];
模板字符``
- 可用
${}这样简单的方式嵌入变量
- 在模板字符串中,空格、缩进、换行都会被保留 (超合适写 DOM 节点)
- 模板字符串完全支持“运算”式的表达式,你可以在
${}里完成一些计算
let name = 'yan'
let newName = `${name} jiang`
let list = `
<ul>
<li>列表项1</li>
<li>列表项2</li>
</ul>
`;
function add(a, b) {
const finalString = `${a} + ${b} = ${a + b}`;
console.log(finalString);
}
add(1, 2);
字符串的实用方法
- 存在性判定。以前只能用
indexOf>-1,现在可灵活使用includes、startsWith、endsWith
- 自动重复。
repeat方法让同一个字符串被连续复制多次
const son = 'ha'
const father = 'xi he ha'
father.includes(son)
father.startsWith(son)
father.endsWith(son)
const sourceCode = 'repeat '
const repeated = sourceCode.repeat(3)
console.log(repeated)