有哪些数据类型
根据JavaScript中的变量类型传递方式,分为基本数据类型和引用数据类型两大类七种。
基本数据类型包括Undefined、Null、Boolean、Number、String、Symbol (ES6新增)六种。引用数据类型只有 Object—种,主要包括对象、数组和函数。
基本数据类型和引用数据类型的区别
两者作为函数的冬数进行传递时
1、基本数据类型传入的是数据的副本,原数据的更改不会影响传入后的数据。
2、引用数据类型传入的是数据的引用地址,原数据的更改会影响传入后的数据。
两者在内存中的存储位置
1、基本数据类型存储在栈中。
2、引用数据类型在栈中存储了指针,该指针指向的数据实体存储在堆中。
判断数据类型的方法
1、利用typeof可以判断数据的类型;
2、A instanceof B可以用来判断A是否为B的实例,但它不能检测null和undefined;
3. B.constructor ==A可以判断A是否为B的原型,但constructor 检测Object 与instanceof不一样,还可以处理基本数据类型的检测。
不过函数的_constructor 是不稳定的,这个主要体现在把类的原型进行重写,在重写的过程中很有可能出现把之前的constructor给覆盖了,这样检测出来的结果就是不准确的。
4、Object.prototype.toString.call()
Object.prototype.toString.call()是最准确最常用的方式。
与深拷贝区别,如何实现
浅拷贝只复制指向某个对象的指针,而不复制对象本身。浅考贝的实现方式
1、 Object.assign():需注意的是目标对象只有一层的时候,是深拷贝;
2.扩展运算符;
深拷贝就是在拷贝数据的时候,将数据的所有引用结构都拷贝一份。深拷贝的实现方式
1、手写遍历递归赋值;
2、结合使用JSON.parse()和JSON.stringify()方法。
作用域和作用域链
作用域可以理解为一个独立的地盘,可以理解为标识符所能生效的范围。作用域最大的用处就是隔离变量,不同作用域下同名变量不会有冲突。ES6中有全局作用域、函数作用域和块级作用域三层概念。
当一个变量在当前块级作用域中未被定义时,会向父级作用域(创建该函数的那个父级作用域)寻找。如果父级仍未找到,就会再一层一层向上寻找,直到找到全局作用域为止。这种一层一层的关系,就是作用域链。
作用域和执行上下文的区别
1、函数的执行上下文只在函数被调用时生成,而其作用域在创建时已经生成;
2、函数的作用域会包含若千个执行上下文(有可能是零个,当函数未被调用时)。
闭包
闭包就是引用了其他四数作用域中变量的函数,这种模式通常在函数嵌套结构中实现。里面的函数可以访问外面函数的变量,外面的变量的是这个内部函数的一部分。闭包有如下作用:
1.加强封装,模拟实现私有变量;
2、实现常驻内存的变量。
标签:知识点,Object,函数,作用域,JavaScript,数据类型,拷贝,变量 From: https://blog.51cto.com/u_16220922/8010178