JavaScript
序言
整理一些 JavaScript 的相关知识,可能不是太全面,但欢迎补充~~!!!
CodingStartup
-
var、let、const 有什么区别?
var
可以重复证明但会覆盖之前的重名变量、没有作用域特性,但拥有变量提的特性var cool = 1 var cool = 2 ----------------------------------------------------------------------------------- for (var i = 0; i < [1, 2, 3].length; i++) { // ... } console.log(i) // => 3
let
不可以重复声明、不存在变量提升、会产生作用域let cool = 1 let cool = 2 // Error => Identifier 'cool' has already been declared ----------------------------------------------------------------------------------- for (let i = 0; i < [1, 2, 3].length; i++) { // ... } console.log(i) // Error => i is not defined
const
声明一个常量,一经赋值常量的值就不能改变,如果只声明不赋值,也会报错const PI = 3.1415; PI = "我是圆周率" // Error => Assignment to constant variable
如果赋值的是引用数据类型,那么是可以更改其内部的属性或成员的,只要不重新赋值其它的数据类型
const cool = [1, 2, 3] cool.push(4) ----------------------------------------------------------------------------------- cool = { a: 1} // Error => Assignment to constant variable.
-
暂时性死区指的是什么?
ES6规定,
let
、const
命令会使区块形成封闭的作用域,若在声明之前使用变量,就会报错。总之,在代码块内,使用let
声明变量之前,该变量都是不可用的,在这种情况上被称为 ‘‘暂时性死区‘’if (true) { console.log(cool) let cool } // Error => Cannot access 'cool' before initialization
-
const 定义的变量是否能够修改?
一般情况下是不能修改的,如果常量的数据类型是引用类型则可以修改其内部成员和属性,但不能改变数据类型
const cool = { a: 1} cool.b = 2
-
ES6 与 ES5 判断是否完全相等的方法是什么?
判断两个对象是否相等可以使用
Object.is
、恒等于(===)去判断const cool = { a: 1} const so = cool Object.is(cool, so) // => true cool === so // => true
-
ES6 新增方法 Object.assign, 他在作用是什么?
用于对象的合并,将可枚举(
enumerable: true
)属性复制到目标对象中(target
)const cool = { a: 1} Object.assign(cool, { b: 2}) // cool => {a: 1, b: 2}
-
Object.assign 拷贝是深拷贝还是浅拷贝?为什么?
是浅拷贝,因为 Object.assign 拷贝的属性是有限制的,