1. ES6
1.1 变量的声明
变量的声明有三种形式,分别是 var
、let
和const
。
当使用 var
定义的变量,是全局变量,会进行变量提升,可以进行修改 。
当使用let
定义的变量,是局部变量(块级作用域),不会进行变量提升,能够进行修改。
当使用 const
定义的变量,是局部变量,不会进行变量的提升,不能进行修改。
1.2 模板字符串
使用 ${}
书写模板字符串
1.3 展开符(...)
展开符,可以在函数调用或数组构造时,将数组或字符串在语法层面上展开;或者在构造字面量对象时,将对象表达式按key-value
方式展开。
1.4 解构
解构用于将值从数组、属性从对象提取到不同的变量中。
解构可用于函数参数的默认值,以前的做法是在函数内部进行检查赋值,现在可以直接在形参中进行。
1.5 箭头函数
箭头函数的语法比函数表达式更简洁,但是它没有自己的this
、arguments
、super
或target
、。箭头函数适用于需要使用匿名函数的地方。
箭头函数中的 this
指向定义箭头函数的作用域。
1.6 Symbol
ES6
中表明唯一的值。
1.7 模块化
ES6
中的模块化是使用 import
和 export
两个关键字对模块进行引入和暴露。
在 node.js
中则是使用 require
和 module.exports
两个关键字进行引入和暴露。
1.8 函数默认值
在 ES6
中可以直接在函数声明中,形参定义里进行参数的默认值设定。
1.9 异步编程
ES6
中使用 async
和 await
两个关键字进行异步处理,与 Promise
中不同的是,Promise
中的处理函数不需要在定义中书写。
在这之前是使用 Promise
进行异步处理,分为 reject
和 resolve
以及 pedding
三个状态。
1.10 Class
类
ES6
中所提供的面向对象编程的封装,可以使用 class
代替之前的类创建步骤。
在 ES5
中我们使用大写的函数名表示当前函数是一个构造函数,使用 prototype
对其进行方法书写。但是在 ES6
中我们可以直接使用 class
代替它。
基本上,ES6
的class
可以看作只是一个语法糖,它的绝大部分功能,ES5
都可以做到,新的class
写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
1.10.1 constructor
constructor
是类的默认方法,当通过new
实例化对象时被自动调用。
consturctor
方法默认返回实例对象,如果更改的话就无法找到实例对象。
1.10.2 继承
使用extends
进行继承。接着在constructor
中使用super
调用父类的构造函数。
可以在子类中使用super.xxx()
调用父类的方法。
1.10.3 类不存在变量提升
1.10.4 静态方法
通过static
关键字,可以对类创建静态方法,静态方法默认指向类本身,可以被继承。
静态方法只能通过类直接调用,而不能被实例调用。
1.10.5 实例属性
实例属性可以在constructor
中进行赋值,也可以在constructor
之前,类的最顶部进行定义或者赋值,这样一眼就可以看出这个类有哪些实例属性。
2. ES5
2.1 原型
所有的函数都有一个默认的原型,可以使用 prototype
进行查找。原型中所拥有的属性和方法,在其对象中都可以使用,不会重复加载以造成过载。
其中构造函数的 prototype
属性指向其原型对象,对象的 _proto
指向构造函数。
2.2 &&
与 ||
&&
的优先级比||
更高。 &&
遇到false
后面就不会再运行了;||
遇到true
后面就不会再运行了。
2.3 JavaScript
事件机制
事件机制即是EventLoop
,异步任务分为宏任务与微任务。
3. 笔试题
3.1 如何判断是否为Array
使用Object.prototype.toString.call(arr) == '[object Array]'
进行判断
3.2 合并对象
- 通过
Object.assign({}, obj, {age: 19})
进行合并 - 通过
{...obj, a: 233}
进行合并
4. DOM
事件
4.1 DOM
事件级别
DOM 0 级
,即element.onclick = function() {}
DOM 2 级
,即element.addEventListener('click', function(){ })
DOM 3 级
,即element.addEventListener('keyup', function(){ })
4.2 DOM
事件模型
分别是事件冒泡
和事件捕获
。
4.3 DOM
事件流
分别是捕获
、目标阶段
和冒泡
。
4.4 DOM
事件捕获的具体流程
从window
开始,document
、html
、body
依次向下。
DOM
事件冒泡的流程则与其恰好相反。
5. enctype
表单上传
enctype
属性规定在发送到服务器之前应该如何对表单数据进行编码。当属性值为application/x-www-form-urlencoded
时,在发送前编码所有字符(默认); 当属性值为multipart/form-data
时,不对字符编码。 在使用包含文件上传控件的表单时,必须使用该值;当属性值为text/plain
时,空格转换为 "+" 加号,但不对特殊字符编码。
6. cookie
的优点和弊端
cookie
的优点是为持久保存客户端数据提供方便,分担服务器的存储负担。
cookie
的缺点是在IE
、FireFox
下有数量限制,且最大存储容量为4096
字节;cookie
的安全性不高,如果cookie
被拦截到,那么就可以取得所有的session
信息。
7. 浏览器本地存储
浏览器本地存储包含localStorage
和sessionStorage
两种。localStorage
用于持久化本地存储,除非主动删除数据,否则他是不会过期的;而sessionStorage
只是一种会话存储,这些数据只存在于同一个会话中的页面,页面关闭即刻销毁。
网友评论