"前端面试题及答案:var、let、const区别、数组、对象解构赋值"

需积分: 0 0 下载量 184 浏览量 更新于2023-12-06 收藏 123KB DOCX 举报
前端57道面试题及答案.docx var、let、const之间的区别 1、var声明变量可以重复声明,而let不可以重复声明 在使用var声明变量时,可以在同一个作用域内多次声明同一个变量,而重新赋值会改变变量的值。而使用let声明变量时,同一个作用域内只能声明一次变量,重复声明会报错。 2、var是不受限于块级的,而let是受限于块级 使用var声明的变量作用域是函数级的,而不受块级作用域的限制。这意味着在函数内部使用var声明的变量在整个函数内部都是可见的。而使用let声明的变量只在块级作用域内有效,超出块级作用域就无法访问。 3、var会与window相映射(会挂一个属性),而let不与window相映射 使用var声明的变量会自动成为全局对象window的属性。这意味着在全局作用域下声明的var变量会成为全局变量,可以通过window对象来访问。而使用let声明的变量不会成为全局对象的属性,无法通过window对象来访问。 4、var可以在声明的上面访问变量,而let有暂存死区,在声明的上面访问变量会报错 使用var声明的变量存在变量提升的情况,即在声明之前可以访问变量并且值为undefined。而使用let声明的变量在声明之前访问会报错,这是因为let声明的变量存在暂存死区,只有在变量声明之后才能使用。 5、const声明之后必须赋值,否则会报错。 使用const声明的变量必须在声明时进行赋值,否则会报错。const声明的变量不能再次赋值,它是常量,一旦赋值就不能改变。 6、const定义不可变的量,改变了就会报错 使用const声明的变量定义的是不可变的量,一旦赋值后就不能再修改。如果尝试修改const声明的变量的值,就会报错。 7、const和let一样不会与window相映射、支持块级作用域、在声明的上面访问变量会报错 const和let都不会将声明的变量作为全局对象的属性,不会与window相映射。它们都支持块级作用域,变量在块级作用域内有效。同时,const声明的变量在声明的上面访问会报错,存在暂存死区。 解构赋值 数组解构 let [a,b,c] = [1,2,3] //a=1,b=2,c=3 使用数组解构可以将数组中的值赋给对应的变量。上述代码将数组[1,2,3]中的值分别赋给变量a、b、c。 let [d,[e],f]=[1,[2],3] //嵌套数组解构 当数组中包含嵌套数组时,可以使用嵌套数组解构将嵌套数组中的值取出并赋给变量。上述代码中,变量d被赋值为1,变量e被赋值为2,变量f被赋值为3。 let [g,...h]=[1,2,3] //数组拆分 使用rest语法(...)可以将剩余的数组元素赋给一个新的数组。上述代码中,变量g被赋值为1,而变量h被赋值为[2,3]。 let [i,,j]=[1,2,3] //不连续解构 可以通过使用逗号来跳过数组中的元素,实现不连续的解构赋值。上述代码中,变量i被赋值为1,变量j被赋值为3。 let [k,l]=[1,2,3] //不完全解构 如果解构赋值的左侧变量数量少于右侧数组的长度,则只会取出对应数量的元素进行赋值。上述代码中,变量k被赋值为1,变量l被赋值为2。 对象解构 let {a,b} ={a:'aaaa',b:'bbbb'} //a='aaaa',b='bbbb' 使用对象解构可以从对象中取出对应属性的值并赋给对应的变量。上述代码中,变量a被赋值为'aaaa',变量b被赋值为'bbbb'。 总结: 本文主要介绍了var、let、const之间的区别,以及数组解构和对象解构赋值的用法。 var声明变量可以重复声明,而let不可以重复声明;var是不受限于块级的,而let是受限于块级;var会与window相映射,而let不与window相映射;var可以在声明的上面访问变量,而let有暂存死区,在声明的上面访问变量会报错;const声明之后必须赋值,否则会报错;const定义的是不可变的量,改变了就会报错;const和let一样不会与window相映射、支持块级作用域、在声明的上面访问变量会报错。 数组解构可以将数组中的值赋给对应的变量,可以嵌套解构、拆分数组、实现不连续解构和不完全解构。 对象解构可以从对象中取出对应属性的值并赋给对应的变量。