ES6

  • 描述用let和var声明变量的区别
    • let的生命周期受代码影响;var不受代码影响;
    • let不存在“代码提升”,只有在声明之后才能使用变量;var有变量提升
    • let在同一个声明周期上不能重复声明;var可以重复声明
    • 在浏览器环境中,全局中声明let变量,变量不会成为window上的一个属性;var则声明后则会成为window的一个属性
 
  • 数组.map的回调函数需要返回值吗?如需要,返回什么内容?
    • 需要,可以返回所需的数据
  • 数组.forEach的回调函数需要返回值吗?如需要,返回什么内容?
    • forEach的作用每次循环进行操作,不需要返回值
  • 数组.find/findIndex的回调函数需要返回值吗?如需要,返回什么内容?
    • 需要,返回true/false
  • 数组.filter的回调函数需要返回值吗?如需要,返回什么内容?
    • 需要,返回true/false
 
  • 代码块
    • 代码块就是指 一组大括号({})所包围的区域
 
  • let/const 和 var/function 的区别
 
var/function
let/const
受“块作用域”影响
有变量提升现象
在同个作用域可以重复声明
全局声明时会成为window的属性
  • var/function 不受“块作用域”影响
  • let/const 受“块作用域”影响
 
  • var/function 有变量提升现象
  • let/const 没有变量提升现象
 
  • var/function 在同个作用域可以重复声明
  • let/const 不能在同个作用域可以重复声明
 
    • var/function 全局声明时会成为window的属性
    • let/const 全局声明时不会会成为window的属性
 
  • 变量提升
    • var 变量提升:
(1)声明部分提升到它所在生命周期顶端
(2)赋值部分保留在原地不动。
    • function 变量提升:
(1)声明部分提升到它所在生命周期顶端
(2)赋值的部分提升到代码块的顶端。
 
  • 插值可以是
  • 常数
  • 变量
  • 运算结果
  • 表达式(一句,不是一行)
 
  • 回调函数的参数有几个,各代表什么含义
    • 最多有3个参数
    • function(item,index,arraySelf){...}
    • 分别代表:
      • item - 数组的元素、
      • index - 该元素的下标
      • arraySelf - 被迭代数组自己
 
  • 反引号字符串与普通字符串有什么区别
    • 里面可以写多行文本
    • 里面可以用${...}插入表达式
 
  • 数组有哪些迭代方法?
    • forEach map filter find findIndex every some reduce
 
  • 描述var,let,const,之间的异同
    • let
      • 生命周期为块作用域
      • 没有变量提升
      • 同生命周期不能重复声明
      • 浏览器全局声明let变量不会成为window的属性
    • const
      • 声明常量,不能修改
      • 必须声明时赋值
      • 块作用域
      • 没有变量提升
      • 同级块不能重复声明
      • 浏览器全局声明const变量不会成为window的属性
    • var
      • 没有块的概念
      • 可以跨块访问,但是不能跨函数访问
      • 可重名
      • 会进行变量提升
      • 浏览器里全局var会成为window对象的属性
 
  • var/function有生命周期吗?受什么影响?
    • 有,var/function的
    • 生命周期在函数内部。
 
  • let和const的区别是什么?
    • let声明的变量可以重复赋值,const只能在声明时被赋值一次。
 
  • let和const的相同点是什么?
    • 生命周期相同,都受代码块影响。
  • 没有变量提升。
  • 同一个生命周期里不能重复声明。
  • 全局生命周期里声明的变量不会成为Windows对象的属性。
 
  • 箭头函数跟普通函数的区别
    • 箭头函数会自动绑定当前定义环境内部的this值
    • 箭头函数的this是固定的(不变的),声明时环境里的this
 
  • localStorage的方法
    • setltem(key,value) - 保存数据
    • getltem(key) - 获取数据
    • removeltem(key) - 删除数据
    • clear - 清空
    • 生命周期:永久
    • 单个域下可存储5MB
 
  • 本地存储的用
    • 用户的会话信息(如用户登录信息,购物车数据)
    • 用户的个性化设置(如网站设置)
    • 保存临时数据(如一些中间过程的数据)
    • 缓存(如缓存后端接口的数据,可以减少对后端服务器的压力)
    • 记录分析用户行为
 
  • 描述localStorage和sessionStorage的区别
    • localStorage的生命周期是永久,除非主动删除掉
    • sessionStorage的生命周期是会话周期,也就是说浏览器窗口关闭后就会消失
    • 两者只是数据生命周期不同,其余使用方法完全一样
 
  • 跨页面存储数据有哪些方法
    • cookie
    • localStorage/sessionStorage
 
  • 序列化和反序列化
    • JSON.stringify(object)-js对象变为json字符串
    • JSON.parse(string)-将json字符串变为js对象
    • parse有可能失败,用try...catch捕捉错误
localStorage.setItem(key, JSON.stringify(value))
JSON.parse(localStorage.getItem(key))
 
  • storage事件什么情况下会触发
    • 当数据写入,删除的时候都会触发事件
    • 在window上监听事件,window.addEvenListener('storage',function(){/**/})
 
  • 如何得到实例(instance)上的原型
    • instance._proto_或Object.getPrototypeOf(instance)
 
  • class存在提升吗?
    • 虽然class声明的变量是function,但不存在提升
 
  • 箭头函数什么情况下可以省略函数体的{}
    • 函数体只有一句可以省略函数体的{}和return
 
  • 模块中的JavaScript有什么要求?
    • 必须符合严格模式‘use strict’
 
  • script标签中如何能启用模块
    • <script type='module'>...</scripyt>
 
  • js中的模块是指什么?
    • 就是指一个js文件
 
  • import怎样使用
    • 可以按需导入,指定导入的变量名,如import {变量名} from '文件名'把整个包导入到一个对象x中,导入默认值时不需要写花括号,如import 默认值 from '文件名',导入变量可以重命名
 
  • 箭头函数的特点
    • 箭头函数的this绑定为定义箭头函数的环境中的this
    • 箭头函数不能做构造函数
    • 箭头函数中不能使用arguments
 
  • cookie的特点
    • 单条大小4096字节(4)
    • 单个域名下的cookie数量有限
    • 可以跨页面,浏览器生存周期存在可以设置域,路径,过期时间
    • 几乎所有浏览器都支持,但某些浏览器的隐私模式下不能使用
 
  • 箭头函数什么情况下可以省略参数位置
    • 只有一个参数时可以省略参数位置
 
  • export怎样使用?
    • 可以导出有名字的变量,也可以导出默认值
    • 可以导出任意多个变量
    • 同一个模块的导出项中不允许重名
    • 可以聚合导出(写在花括号里)并且用as重命名
    • 默认导出不关心名字
    • export语句只能写在模块的顶级快中
 
  • 关于class
    • class是构造函数的语法糖
    • class是函数,type class{ }返回"function"
    • class无变量提升
    • class不能当成普通函数调用
    • class声明变量特点和let一样
    • 构造函数不是必须,并且一个class只能有一个构造函数
 
  • 关于继承
    • 关键字 extends
    • 形式 class B extends A {}
    • 子类的构造方法不是必须有的
    • 但子类如果有构造方法,必须在构造方法中调用父类构造方法super(),并且super调用必须写在使用this之前。
    • 可以通过super.method()调用父类的方法
 
Promise定义
1. Promise是ES6自带的构造方法
2. Promise用于处理异步编程
 
Promise构造函数的使用
- new Promise(fn)
- fn是一个立即执行的函数,因此它的内容是同步执行的
- fn的形式为function(resolve, reject) {}
- resolve在成功时调用,并传值,将promise状态更改为成功
- reject在失败时调用,并传错误原因,将promise状态更改为失败
 
Promise实例状态特点
三种状态
- pending - 进行中,悬而未决(也是初始状态)
- fulfilled - 满足条件,成功
- rejected - 被抛弃,失败
- promise的状态只能改变一次,且只能从pending->fulfilled或pending->rejected,没有其他转化可能性
 
Promise实例的方法
- .then(successFn, failedFn) - fulfilled时进入successFn或rejected时进入failedFn
- .catch(failedFn) - rejected时进入回调函数
- .finally(fn) - 无论结果是fulfilled或者是rejected,都会执行指定的回调函数
then / catch / finally 返回新promise
- 回调函数里return的时候,则成功
- 在return中返回另一个promise,下一次then的时候得到的值是这个promise状态改变后的值
- 回调函数里throw的时候,则失败
 
Promise.resolve(v)
- 返回一个成功的Promise实例,用v作为promise的值
Promise.reject(e)
- 返回一个失败的Promise实例,用e作为promise的错误
 
 
  1. 函数内部不能在用let/const声明函数参数的同名函数
  2. 默认参数的位置通常出现在开头或结尾处,有默认参数情况下,参数名不能重名
  3. ...必须在函数参数的结尾,能用...的必须是能遍历的对象
  4. 参数只有一个的时候,参数的括号可以省略,没有参数括号不能省略 例子:const fn=()=>{console.log}
  5. function定义的函数this不固定(变化的),根据调用时的上下文规定
  6. 箭头函数不能做构造函数/也就是说,不可以使用new命令,否则会抛出一个错误。
  7. 箭头函数里没有arguments对象,可以用...rest替代
  8. 函数内部不能在用let/const声明函数参数的同名参数
  9. 解构的关键:对准位置/null和undefind不能解构
  10. class定义的类不能当成普通函数使用,会报错

posted @ 2021-11-30 20:28  壮壮姐姐~  阅读(25)  评论(0编辑  收藏  举报