var、let和const三者之间的区别:
- var、let和const都是用来声明变量的。
- var声明的变量不存在块级作用,但是存在变量提升,而且同一个作用域下可以重复声明变量名称相同的变量。
- let和const声明的变量存在块级作用域,但是不存在变量提升,会存在暂时性死区,而且同一个作用域下不能重复声明变量名称相同的变量。
- const声明的是常量,在声明的时候需要设置一个初始化的值,而且不能修改。
使用var、let和const声明变量:
// var声明变量
var id = 1
// let 声明变量
let name = '夏洛特'
// const声明的是常量
const COLOR_RED = 'red'
var声明的变量不存在块级作用,但是存在变量提升:
// var声明的变量不存在块级作用
if(true) {
var str = '在if代码块中声明的变量'
}
console.log(str) // 在if代码块中声明的变量
// var声明的变量存在变量提升
//在声明num变量之前访问
console.log(num) // 打印undefined,不会报错
var num = 100
// 可以在同一个作用域下可以重复声明变量名称相同的变量。
var name = '张三'
var name = '李四'
console.log(name) // 李四 会覆盖前面的变量
let和const声明的变量存在块级作用域,但是不存在变量提升,会存在暂时性死区:
// let和const声明的变量存在块级作用域
if(true) {
let str = '张三'
const COLOR_RED = 'red'
}
// 会报错
console.log(str) // 报错:str is not defined
console.log(COLOR_RED) // 报错:COLOR_RED is not defined
// 不存在变量提升,会存在暂时性死区
console.log(num) // 报错: Cannot access 'num' before initialization
console.log(color) // 报错: Cannot access 'color' before initialization
let num = 100
const color = 'yellow'
let和const在同一个作用域下不能重复声明变量名称相同的变量:
{
let str = '变量A'
let str = '变量B' // 报错:Identifier 'str' has already been declared
}
{
const color = 'red'
const color = 'yellow' // 报错:Identifier 'color' has already been declared
}
const声明的是常量,在声明的时候需要设置一个初始化的值,而且不能修改:
const book = '水浒传'
book = '红楼梦' // 报错: Assignment to constant variable.
注意:如果是引用类型,是可以修改对象内部的属性和值的,还有可以修改数组的元素,引用类型的常量不能修改的是引用地址。
// 修改对象的某个属性的值
const obj = {
id: 1,
name: '郝仁'
}
obj.name = '郑郝仁'
console.log(obj) // {id: 1, name: '郑郝仁'}
// 修改数组的元素
const arr = [1, 2, 3]
arr.push(4)
console.log(arr) // [1, 2, 3, 4]
如果修改对象或者数组的引用地址:
// 修改对象的引用地址
const obj = {
id: 1,
name: '郝仁'
}
obj = {
name: '管理员',
password: '123456'
}
console.log(obj) // 报错:Assignment to constant variable.
// 修改数组的引用地址
const arr = [1, 2, 3]
arr = [3, 2, 1]
console.log(arr) // 报错:Assignment to constant variable.
var、let和const三者之间的区别就简单介绍到这里了,祝你生活愉快,早日暴富!