js基础知识汇总
2022-06-06 14:03:06   0  举报             
     
         
 AI智能生成
  前端
    作者其他创作
 大纲/内容
  ES6    
     let、const、var的区别    
     块级作用域:块作用域由 { }包括,let和const具有块级作用域,var不存在块级作用域。块级作用域解决了ES5中的两个问题:
内层变量可能覆盖外层变量
用来计数的循环变量泄露为全局变量
    内层变量可能覆盖外层变量
用来计数的循环变量泄露为全局变量
 变量提升:var存在变量提升,let和const不存在变量提升,即在变量只能在声明之后使用,否在会报错。  
     给全局添加属性:浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。  
     重复声明:var声明变量时,可以重复声明变量,后声明的同名变量会覆盖之前声明的遍历。const和let不允许重复声明变量。  
     暂时性死区:在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。  
     初始值设置:在变量声明时,var 和 let 可以不用设置初始值。而const声明变量必须设置初始值。  
     指针指向:let和const都是ES6新增的用于创建变量的语法。 let创建的变量是可以更改指针指向(可以重新赋值)。但const声明的变量是不允许改变指针的指向。  
     const对象的属性可以修改吗  
     如果new一个箭头函数会怎么样  
     箭头函数与普通函数的区别    
     1.简洁。可以介绍没有参数或者返回值只有一个之类的省略情况  
     2.不会创建自己的this,只会在自己作用域的上一层继承this,所以箭头函数this不能改变,包括call,bind,apply  
     3.不能作为构造函数使用,  
     4.没有自己的arguments,在箭头函数中访问arguments实际上是获取了它外层函数的arguments值,可以用...arg  
     5.,没有prototype  
     6.不能用作Generator函数,不能使用yeild关键字  
     箭头函数的this指向哪里    
     babel转化  
     扩展运算符的作用及使用场景    
     对象扩展运算符  
     数组扩展运算符    
     转化参数序列,复制数组,合并数组,与解构赋值结合,字符串转数组  
     Proxy可以实现什么功能    
     在 Vue3.0 中通过 Proxy 来替换原本的 Object.defineProperty 来实现数据响应式。  
     对对象与数组的解构的理解    
     数组  
     对象  
     如何提取高度嵌套的对象里指定的属性    
     逐级解构  
     ES6中模板语法与字符串的处理    
     模板字符串  
     存在性判定  
     自动重复:  
     原型    
     对原型、原型链的理解  
     原型修改与重写  
     原型链指向  
     原型链的终点是什么|如何打印出原型链的终点  
     如何获得对象非原型链上的属性  
     异步编程    
     异步编程的实现方式    
     回调函数  
     Promise  
     generator  
     asunc函数  
     setTimeout、Promise、Async/Await的区别  
     对Promise的理解  
     Promise的基本用法  
     Promise解决了什么问题  
     Promise.all和Promise.race的区别和使用场景  
     对async/await的理解  
     await到底在等啥  
     async/await优势  
     async/await对比Promise的优势  
     async/await如何捕获异常  
     并发与并行的区别  
     什么是回调函数?回调函数有什么缺点?如何解决回调地狱  
     setTimeout、setInterval、requestAnimationFrame各有什么特点  
     执行上下文、作用域链、闭包    
     对闭包的理解    
     理解定义  
     常用用途  
     使用场景    
     函数节流  
     优缺点    
     ① 减少全局变量;
② 减少传递函数的参数量;
③ 封装;
    ② 减少传递函数的参数量;
③ 封装;
 使用闭包会占有内存资源,过多的使用闭包会导致内存溢出等  
     对作用域、作用域链的理解    
     全局作用域和函数作用域    
     全局作用域  
     函数作用域  
     块级作用域  
     作用域链  
     对执行上下文的理解    
     1. 执行上下文类型    
     (1)全局执行上下文  
     (2)函数执行上下文  
     (3)eval函数执行上下文(不重要)  
     2. 执行上下文栈  
     3. 创建执行上下文    
     创建阶段    
     this。绑定  
     创建词法环境组件  
     创建变量环境组件  
     执行阶段  
     垃圾回收与内存泄漏    
     浏览器的垃圾回收机制    
     概念  
     回收机制  
     回收方式    
     标记清除  
     引用计数  
     减少垃圾回收    
     数组  
     对象  
     函数  
     有哪些情况会导致内存泄漏    
     意外的全局变量  
     计时器或回调函数  
     脱离DOM的引用  
     闭包  
     this/call/apply/bind    
     对this对象的理解    
     函数调用模式  
     方法调用模式  
     构造器调用模式  
     apply 、 call 和 bind 调用模式  
     call()和apply()的区别  
     call和apply哪个性能更好?  
     实现call、bind及apply函数    
     call  
     apply  
     bind  
     面向对象    
     对象创建的方式有哪些    
     工厂模式  
     构造函数模式  
     原型模式  
     组合使用构造函数模式和原型模式  
     动态原型模式  
     寄生构造函数模式  
     对象继承的方式有哪些    
     原型链  
     构造函数  
     组合继承  
     原型式继承  
     寄生式继承  
     寄生式组合继承  
     javaScript基础    
     new操作符实现原理    
     首先创建了一个新的空对象  
     设置原型,将对象的原型设置为函数的 prototype 对象  
     让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性)  
     判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。  
     map和Object的区别  
     map和weakMap的区别  
     javaScript都有哪些内置对象    
     值属性  
     函数属性  
     基本对象  
     数字和日期对象  
     字符串  
     可索引的集合对象  
     使用键的集合对象  
     矢量集合  
     结构话数据  
     控制抽象对象  
     反射  
     国际化  
     WebAssembly  
     其他  
     常用的正则表达式有哪些  
     对JSON的理解  
     javaScript脚本延迟加载的方式有哪些  
     JavaScript类数组对象的定义    
     Array.prototype.slice.call(arrayLike);  
     Array.prototype.splice.call(arrayLike, 0);  
     Array.prototype.concat.apply([], arrayLike);  
     Array.from(arrayLike);  
     数组有哪些原生方法    
     数组和字符串的转换方法    
     toString()  
     toLocalString()
  
     join()    
     可指定转换为·字符串时的分割符  
     数组尾部操作方法    
     pop()  
     push()  
     数组首部操作的方法    
     shift()  
     unshift()  
     重排序reverse()和sort()  
     数组连接的方法    
     concat()  
     数组截取的方法    
     slice()  
     数组插入的方法    
     splice()  
     数组归并的方法    
     reduce()和reduceRight()  
     Unicode、UTF-8、UTF-32的区别    
     UTF-8  
     UTF-32  
     常见的位运算符有哪些,其计算规则是什么  
     为什么函数的arguments的参数是类数组而不是数组?如何遍历类数组  
     社么是DOM、BOM  
     对类数组对象的理解、如何转化为数组  
     escape,encodeURL,encodeURLComponent的区别  
     对AJAX的理解,实现一个AJAX请求  
     JavaScript为什么要变量提升,它导致了什么问题  
     什么是尾调用,使用尾调用有什么好处  
     ES6模块与CommonJS模块有什么异同  
     常见的DOM操作有哪些    
     DOM获取  
     DOM创建  
     DOM删除  
     DOM修改  
     use strict是什么意思?使用它区别是什么?  
     如何判断一个对象是否属于某个类  
     强类型语言和弱类型语言的区别  
     解释性语言和编译型语言的区别  
     for...in和for...of的区别  
     如何使用for...of遍历对象  
     ajax、fetch、axios区别    
     ajax  
     fetch  
     axios  
     数组遍历的方法有哪些  
     数据类型    
     JavaScript有哪些数据类型,它们的区别是什么?    
     基础数据类型    
     String  
     Number  
     Boolean  
     Null  
     Undefined  
     Symbol    
     es6新增  
     BigInt
    
     es6新增  
     复合数据类型    
     Object  
     Function  
     Array  
     数据类型检测的方法有哪些    
     typeof  
     instanceof  
     constructor  
     Object.proto.toString.call()  
     判断数组的方式有哪些    
     Object.prototype.toString.call()  
     obj.__proto__ === Array.prototype  
     Array.isArray(obj)  
     obj.instanceof Array  
     Array.prototype.isPrototypePf(obj)  
     null和undefined区别    
     undefined代表的是未定义 ,null代表的是空对象  
     undefined在javaScript中不是一个保留字,可以使用undefined作为变量名,但方法危险,可以使用viod 0安全的获取undefined值  
     当使用typeof判断时,null返回"object",历史遗留问题  
     typeof null结果是什么,为什么    
     "object",在js中所有值都存储在32位的单元中,而object的类型标签用000代表,null是特殊数据类型,null值是机器码NULL指针(null指针全是000)  
     intanceof操作符的实现原理及实现    
     instanceof 运算符用于判断构造函数的 prototype 属性是否出现在对象的原型链中的任何位置。  
     为什么0.1+0.2 !==0.3,如何让其相等    
     计算机是通过二进制的方式存储数据的,这两个数的二进制都是无限循环小数,而js处理这种最多保留小数点后52位,最后遵从0舍1入  
     如何安全的获取undefined值    
     void 0  
     typeof NaN结果是什么    
     Number  
     isNaN和Number.isNaN函数的区别  
     ==操作符的强制类型转换规则    
     首先会判断两者类型是否**相同,**相同的话就比较两者的大小;  
     类型不相同的话,就会进行类型转换;  
     会先判断是否在对比 null 和 undefined,是的话就会返回 true  
     判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number  
     判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断  
     判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断  
     其他值到字符串的转换规则    
     Null 和 Undefined 类型 ,null 转换为 "null",undefined 转换为 "undefined",  
     Boolean 类型,true 转换为 "true",false 转换为 "false"。  
     Number 类型的值直接转换,不过那些极小和极大的数字会使用指数形式。  
     Symbol 类型的值直接转换,但是只允许显式强制类型转换,使用隐式强制类型转换会产生错误。  
     对普通对象来说,除非自行定义 toString() 方法,否则会调用 toString()(Object.prototype.toString())来返回内部属性 [[Class]] 的值,如"[object Object]"。如果对象有自己的 toString() 方法,字符串化时就会调用该方法并使用其返回值。  
     其他值到数字值的转换规则    
     Undefined 类型的值转换为 NaN。  
     Null 类型的值转换为 0。  
     Boolean 类型的值,true 转换为 1,false 转换为 0。  
     String 类型的值转换如同使用 Number() 函数进行转换,如果包含非数字值则转换为 NaN,空字符串为 0。  
     Symbol 类型的值不能转换为数字,会报错。  
     对象(包括数组)会首先被转换为相应的基本类型值,如果返回的是非数字的基本类型值,则再遵循以上规则将其强制转换为数字。  
     其他值到布尔类型的值的转换规则    
     假值的布尔强制类型转换结果为 false。从逻辑上说,假值列表以外的都应该是真值。  
     || 和&&操作符的返回值    
     子主题  
     Object.is()与比较操作符"==="、"=="的区别    
     使用双等号(==)进行相等判断时,如果两边的类型不一致,则会进行强制类型转化后再进行比较。
  
     使用三等号(===)进行相等判断时,如果两边的类型不一致时,不会做强制类型准换,直接返回 false。  
     使用 Object.is 来进行相等判断时,一般情况下和三等号的判断相同,它处理了一些特殊的情况,比如 -0 和 +0 不再相等,两个 NaN 是相等的。  
     什么是JavaScript的包装类型    
     在 JavaScript 中,基本类型是没有属性和方法的,但是为了便于操作基本类型的值,在调用基本类型的属性或方法时 JavaScript 会在后台隐式地将基本类型的值转换为对象  
     JavaScript中如何进行隐式类型的转换    
     在运算符前后值不同    
     +操作符+操作符的两边有至少一个string类型变量时,两边的变量都会被隐式转换为字符串;其他情况下两边的变量都会被转换为数字。  
     -、*、\操作符NaN也是一个数字  
     对于**==**操作符
操作符两边的值都尽量转成number
    操作符两边的值都尽量转成number
 对于**<和>**比较符
如果两边都是字符串,则比较字母表顺序:其他情况下,转换为数字再比较:
    如果两边都是字符串,则比较字母表顺序:其他情况下,转换为数字再比较:
 ToPrimitive方法  
     +操作符什么时候用于字符串的拼接    
     + 的其中一个操作数是字符串(或者通过以上步骤最终得到字符串),则执行字符串拼接,否则执行数字加法。  
     为什么会有BigInt的提案  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 