目录

1.语法

2.类型、值和变量

3.表达式和运算符

4.语句

5.数组

6.对象

7.函数

8.全局属性和方法

9.词法作用域、作用域链、闭包

10.原型链、继承机制

11.this的理解

12.ES5新特性

13.ES6

内容

1.语法

2.类型、值和变量

3.表达式和运算符

  • typeof和instanceof

  • 运算符优先级

4.语句

5.数组

6.对象

  • Object类方法和对象实例方法

  • Number、Date、 Math对象

7.函数

  • js构造函数

8.全局属性和方法

  • JS全局函数,Number方法、Math、Date

9.词法作用域、作用域链、闭包

  • 理解词法作用域、作用域链、闭包。

10.原型链、继承机制

  • js继承机制,模拟类继承的方式(原型链)

11.this的理解

12.ES5新特性

13.ES6

  • 箭头函数用法和普通函数有哪些区别,什么时候用比较好?

        首先,形式上不同,表达更简洁;一个用处就是,简化回调函数。
    
  • let const声明符和var的区别,块级作用域的理解

        let声明的变量只在代码块内有效。
        var命令会发生变量提升的现象,即变量可以在声明之前使用,值为undefined;而let不会;暂时性死区(temporal dead zone, TDZ)在let声明变量之前,该变量都不可用。
        在同一个块内,不允许用let重复声明变量。
        const和let基本相同,除了const声明的变量的指针不能改变。
    
        块级作用域
        ES5中只有全局作用域和函数作用域;这样可能造成不便,如内层变量可能覆盖外层变量,用来计数的循环变量泄露为全局变量。
        ES6中let为js新增了块级作用域。
        外层作用域无法读取内层作用域的变量;内层作用域可以定义外层作用域的同名变量;块级作用域的出现可以使立即执行函数表达式不再必要了。
    
  • 模板字符串,什么时候用

        单纯的模板字符串还存在着很多的局限性。如:
    
        1.不能自动转义特殊的字符串。(这样很容易引起注入攻击)
        2.不能很好的和国际化库配合(即不会格式化特定语言的数字,日期,文字等)
        3.没有内建循环语法,(甚至连条件语句都不支持, 只可以使用模板套构的方法)
    
        “标签模板”
        过滤HTML字符串,防止用户输入恶意内容。
    
  • set和map类型对象

  • 模块import和export

        单个模块输出:export 变量定义/函数定义等
        单个模块输入:import {需要的变量名,函数名} from 某个文件
        整体导入: module 新的对象名 from 某个文件 (这时,文件中定义的变量和函数都是对象的属性和方法)
        
        以默认方式输出: export default 变量啊方法啊对象啊什么的
        然后引入: import 新名字 from 某个文件 (这个新名字就是默认的变量啊方法啊对象啊什么的引用) 
    
  • class和使用构造函数模拟“类”的区别

  • promise的理解

  • for...of

        只有部署了iterator接口的对象才可以使用for...of循环遍历。
        自带遍历器的对象有数组、字符串、类数组对象(argument对象、DOM的NodeList对象等)、set和map结构、Generator对象。
        普通对象不可以。
        for...of是对键值的遍历,而for...in是对键名的直接遍历。
    
  • es6新增的字符串方法

        includes() startsWidth() endsWidth()
        都返布尔值,可传入第二个参数,起始位置,includes和startsWidth从指定位置往后查找,endsWidth往前找
        repeat() 参数是重复几次,返回重复后的字符串
      
  • es6新增的Number、Math方法

        Number.isFinite() Number.isNaN()
        与ES5的全局方法isFinite()和isNaN()不同的是,不会对非数值转换为数组类型,再判断;对非数值全部返回false
        Number.parseInt() Number.parseFloat() 与相应全局方法一样,只不过放在了Number下,使模块化
        Number.isInteger() Number.isSafeInteger()
        Number.MAX_SAFE_INTEGER  Number.MIN_SAFE_INTEGER
        
        Math.trunc() 去除一个数的小数部分,直接去掉,返回整数部分
        
  • es6数组的扩展

        Arry.from() 将类数组对象或者可遍历对象转化成数组,Set结构
        Arry.of() 
        参数是一组数,将它们作为一个数组的元素返回数组。
        与构造函数Array()的区别:Array()会因为参数的个数不同而不同,参数是一个时,返回含参数个元素为undefined的数组
        
        find() findIndex() 
        参数是一个回调函数,返回第一个匹配的元素或其下标。都可以发现NaN,弥补了IndexOf()的不足
        
        fill() 用第一个参数填充数组,用可选的第一第二个参数指定填充的开始位置和结束位置。
        entries() keys() values() 返回一个遍历器,使for...of遍历数组的键值对、键名、键值。
        
        数组推导
        直接在方括号中使用for...of和if语句等对原有数组操作返回新的数组,与map()和filter()功能类似。
        也可以对字符串进行处理。
        
        Array.observe() Array.unobserve()
        

    *es6对象的扩展

        方法Object.is(),与严格相等类似,但是区分-0 +0 NaN不同
            +0 === -0 //true
            NaN === NaN //false
            Object.is(-0, +0) //false
            Object.is(NaN, NaN) //true
        Object.assign() 参数是一个目标对象,一个或多个源对象
        _proto_读取或者设置对象的prototype对象,以前用Object.create()。
        Object.setPrototypeOf() Object.getPrototypeOf()
        增强的对象写法:直接写入变量和函数
        比如: var x = 1; var a = {x, hello(){console.log(x)}};
        属性名表达式: 用表达式作为对象的属性名。
        比如: var zhanglu = "zhoushen"; var b = {[zhanglu], [zhanglu+ 'hahaha']}
        
        
    
  • Set

        类似于数组的新的数据结构,但是成员值都是唯一的,没有重复的值。
        定义var s = new Set();
        参数是一个数组,用Array.from()可以转化成数组。(数组去重的好方法~)
        方法:add() delete() has() clear()
        属性:Set.prototype.size
    
  • generator(超难了解即可)

  • es6目前如何使用(有些可以直接用,其他的如何用)

  • 列几个es7特性(只需列出,不必学习)

  • 数组、对象的解构赋值

        “模式匹配”。
        只要某种数据结构具有Iterator接口,都可以采用数组形式的解构赋值。
        允许有默认值,也可以引用解构赋值的其他变量,但该变量必须已经声明。
        数组的元素有次序,变量按次序取值;而对象属性没有次序,变量名必须和属性名相同才能取到值。
        数组和对象都可以用于嵌套结构的对象。
        用途:

    阮一峰 ES6-解构的用途

  • rest参数使用方法

        用于获取函数多余参数,rest参数中的变量是个数组,该变量将多余的参数放入数组。
        rest参数之后不能再有其他参数。

竹与蜻蜓
123 声望9 粉丝

没有故事的女同学