1.ECMA6Script
1.1es6的变量和模板字符串
ES6 提供了
let
和const
来声明变量,相较于 ES5 的var
,它们更安全、更灵活。
1. let
-
作用域:块级作用域(
{}
内有效)。 -
变量可变,但不能重复声明。
let name = "Alice"; if (true) { let name = "Bob"; // 只在这个代码块内有效 console.log(name); // Bob } console.log(name); // Alice
2. const
-
作用域:块级作用域。
-
必须初始化,且 不可重新赋值(但对象属性可变)。
示例
const age = 25; // age = 30; // ❌ 报错:Assignment to constant variable. const person = { name: "Charlie" }; person.name = "David"; // ✅ 允许修改对象的属性 console.log(person.name); // David
3. var
(ES5 变量,尽量避免使用)
-
作用域:函数作用域(不是块级作用域)。
-
存在变量提升(Hoisting),可以在声明之前访问,值为
undefined
。
模板字符串
要定义多行的字符串类型,使用 飘号 `
1.2es6的解构表达式
let arr = [1,2,3,4,5]
let [a,b,c,d,e] = arr;
console.log(a,b,c,d,e)//1 2 3 4 5
let person ={
name : 'zhangsan',
age : 18
}
let {name,age} = person;
1.3es6箭头函数
相当于java的lambda
function add(a,b) {
return a+b;
}
function add(a,b)=>a+b;
特点:
-
function
关键字被省略 -
参数用
()
括起来(当只有一个参数时,可以省略()
) -
{}
省略时,表达式的结果会自动return
-
{}
存在时,需要手动写return
箭头函数没有自己的this
1.4rest spread
Rest(...rest
):用于收集剩余参数或对象的剩余属性,返回数组/对象。
Spread(...spread
):用于展开数组、对象或函数参数,使其展开为独立值。
区别:
-
Rest
用于合并参数/属性(收集
)。 -
Spread
用于拆分数组/对象(展开
)。
结合使用可以实现数据过滤、参数处理、数组操作等。
对象的深拷贝和浅拷贝
对象的拷贝是快速获得和已有对象相同的对象的方式
浅拷贝
<script>
let arr =['java','c','python']
let person ={
name:'张三',
language:arr
}
// 浅拷贝,person2和person指向相同的内存
let person2 = person;
person2.name="小黑"
console.log(person.name)
</script>
深拷贝
<script>
let arr =['java','c','python']
let person ={
name:'张三',
language:arr
}
// 深拷贝,通过JSON和字符串的转换形成一个新的对象
let person2 = JSON.parse(JSON.stringify(person))
person2.name="小黑"
console.log(person.name)
console.log(person2.name)
</script>