number (数值型),string(字符串型),null ,undefined ,boolean ,symbol (symbol是ES6新增的基本数据类型)`
null 按照万物皆对象原理判定是一个对象,但null 不是一个对象,在32位操作系统中为了性能考虑使用低位存储变量的信息,000开头代表对象,null表示全0,所以被误判为object, 如今内部判断代码以改变。。bug却保留下来。
区别typeof 与instanceof 判断类型的
typeof :对于原始值,除了null都能判断正确的类型
typeof 对于对象来说,除了函数都会显示object, object 不能准确判断类型
instanceof 可以判断一个实例是否属于当前类,因此可判断类型
对象类型和原始类型的区别
原始类型存储值,存与栈中,对象类型存储指针堆中;函数参数是对象时,,由于变量中存的是指针,值存在堆中;函数参数是对象时,由于变量中存的是指针,因此函数中对于对象类型的值的变化也会在全局 中体现
== 和=== 有什么区别
`== 会进行隐式的类型转换(两个类型不相同会转换为数字进行比较,如果到字符串级别可以比较了就不会再向下进行转换)`
`=== 全等,就是判断两者类型和值是否相同。
闭包的定义`与不足
`闭包的含义:函数在声明时,会保存其所在的词法环境(所有父作用域) 到 scopes 属性里 , 如果是函数作用域, 就称为闭包,简单理解就是 外层函数 是内层函数的闭包 -- 必须是函数套函数的方式`
简单来说,闭包就是能读取其他函数内部的变量
`缺点:浪费内存. 外层函数的作用域不会自动销毁, 会被内层函数保存`
`作用:在ES6 2015年之前, 用于避免全局变量污染. 利用闭包, 为函数提供私有的变量, 避免全局变量污染`
function f1(){
var a = 100;
function f2(){
return a;
}
return f2();
}
// 把f2()执行的结果当成f1()返回值,返回值是函数执行的结果。
/var res = f1();
console.log(res);
浅拷贝与深拷贝的定义与区别
浅拷贝:浅拷贝复制引用,复制后的引用都指向同一个对象的实例,彼此之间的操作互相影响
浅拷贝:直拷贝指针地址
/深拷贝指拷贝一个对象的数据之前先拷贝其对象的堆地址,这样改变数据的时不会影响被拷贝的对象
并发与并行的区别
并发:宏观概念,有两个任务A和B,在一段时间内,通过A和B 两个任务间切换,来完成两个任务,这种情况叫并发(一段时间内多个程序可以切换,;;来完成两个任务这种情况叫并发,一个cpu即可)
2.并行。多个任务的行:微观概念假设cpu有两个核心,那么我们就可以同时完成a,b 两个任务即:同时完成完成多个任务可以称为并行(一个时间点内多个程序可以运行,的多个cpu)
回调函数的定义
就是一个函数以传参的方式传给l另一个函数调用,那么这个函数就叫做是回调函数
缺点:但是回调函数有一个致命的弱点,就是容易写出回调地狱,及不能使用tr catch 铺获错误,不直接return
解决:1.Gernerator 2,Promise 3.async及await
进程与线程区别
一个程序必定包含》=1 个进程,
一个进程必定包含》=1个线程
进程之间不共享【内存】每多一个进程就要多分配一定的内存。`
JS单线程带来的好处:`
`JS主要是面向浏览器的,因此是和用户实时交互的,如果多线程执行的话,你无法确定同时开始的任务哪个会先结束,以网页加载为例,可能导致网页HTML结构已经加载好,但是CSS样式还未加载完成,导致用户浏览体验差。或者两个线程同时对一个DOM结点进行修改和删除操作,则无法判断以哪个线程为准。`