← 返回目录

第 1 卷

第 1 / 8 卷作者:13611日期:

方法论

  • 自己动手总结,定期复习,强化记忆。

Javascript

Javascript 有多少种数据类型,如何判断?

按大的类型来说。

primitive types(基本类型,栈内存):Number String Boolean Null Undefined Symbol object types(对象类型,堆内存): Object Array Date

RegExp Map Set 等等

结合 typeof 和 instanceof 可以判断,但是比较繁琐

的法是来判断。

1 function getType(val) { 2

return Object.prototype.toString.call(val).replace(/\[object\s(\w+)\]/ 3 .toLowerCase();

4 }

为什么说 Symbol 是基本数据类型?

Symbol 是没有构造函数 constructor 的,不能通过 new Symbol() 获得实例。

基本类型为什么也可以调方法,比如.toFixed()?

基本类型都有对应的包装类,可以调方法是因为进行了自动装箱。

如何理解原型链?

思路:首先要说什么是原型,为什么要设计原型(共享属性和方法),然后说属性和方法查找的顺序,自然而然就谈到了原型链。原型链可以引申到继承,

继承要结合构造函数和原型。

每个对象都有原型,对象的原型可以通过其构造函数的 prototype 属性访问。查找㇐个对象的属性或方法时,如果在对象本身上没有,就会去其原型上查找;

而原型本身也是㇐个对象,如果在

也找不到,就会继续原型链的终点是。

如何理解闭包?

内部函数 inner 如果引用了外部函数 outer 的变量 a,会形成闭包。如果这个内部函数作为外部函数的返回值,就会形成词法环境的引用闭环(循环引用),对

“”

应变量 a 就会常驻在内存中,形成大家所说的闭包内存泄漏。虽然闭包有内存上的问题,但是却突破了函数作用域的限制,使函数内外搭起了沟通的桥

“”

梁。闭包也是实现私有方法或属性,暴露部分公共方法的渠道。还可以引申出柯里化,bind 等概念,面试官说可以啊,小伙子!变量提升问题

JS 分为词法分析阶段和代码执行阶段。在词法分析阶段,变量和函数会被提升(Hoist),注意 let 和 const 不会提升。而赋值操作以及函数表达式是不会被提

升的。

出现变量声明和函数声明重名的情况时,函数声明优先级高,会覆盖掉同名的变量声明!为了降低出错的风险,尽量避免使用hoist!

注意混杂了函数参数时的坑,主要还是考虑按两个阶段分析,包括函数参数也是有声明和赋值的阶段:

1 var obj = { 2

val: 5 3 }

4 function test(obj) { 5

obj.val = 10;

6 console.log(obj.val);

7 var obj = { val: 20 };

8 console.log(obj.val)

9 }

10test(obj);

11console.log(obj.val)

12 13//10 20 10

1 function test(obj) { 2

console.log(typeof obj)

3 function obj() {} 4

} 5 test({})

6 7

//function

暂时性死区

这个其实在 ES6 规范就有提到了:The variables are created when their containing Lexical

Environment <https://262.ecma-international.org/6.0/#sec-lexical-environments> is instantiated but may not be accessed in any way until

’ the variables LexicalBinding is evaluated.

通过 let 或 const 声明的变量是在包围它的词法环境实例化时被创建,但是在变量的词法绑定执行前,该变量不能被访问。

1 2typeof a; //报Uncaught ReferenceError: a is not defined

let a;

var 是没有这个问题的,var 声明变量有变量提升,并且变量的初始值是 undefined。

警告:养成先声明再使用的好习惯,别花里胡哨的!

诡异的块级函数声明

a = 2 4 function a() {}

5 a = 1 6

} 7 console.log(a)

8 //2

严格模式要注意的地方

  • Module code is always strict mode code.
  • All parts of a ClassDeclaration or a ClassExpression are strict mode code.
  • 禁止意外创建全局变量,直接抛出错误
  • this 问题
  • arguments 和参数列表的独立性,并且 arguments 不可修改
  • 给 NaN 赋值会抛出错误
  • 对象操作:给不可写属性赋值(writable: false);给只读属性赋值(只有 get,没有 set);给不可扩展对象新增属性
  • 严格模式要求参数名唯㇐,属性名唯㇐
  • 禁止八进制数字
  • 禁止对 primitive type 的变量加属性或方法
  • 禁止使用with
  • eval 不再为 surrounding scope 添加新的变量
  • 禁止delete 声明的变量,禁止delete 不可删除的属性或方法

LHS 和 RHS 是什么?会造成什么影响?

LHS 是 Left Hand Side 的意思,左值查询㇐个变量,如果变量不存在,且在非严格模式下,就会创建㇐个全局变量。RHS查询㇐个变量,如果变量不存在,

就会报错 ReferenceError。

常见的 JS 语法错误类型有哪些?举几个例子。

ReferenceError:引用了不存在的变量

TypeError:类型错误,比如对数值类型调用了方法。

SyntaxError:语法错误,词法分析阶段报错。

RangeError:数值越界。

URIError,EvalError

在 try-catch 或 with 中定义变量有什么影响?

catch子句和 with 语句中有自己的词法作用域,但是如果通过 var 定义变量,会直接影响 try-catch 或 with 语句所在词法作用域。

本卷图片

本页图片

第 3 页图片 1
图 3-1
第 3 页图片 2
图 3-2
第 3 页图片 3
图 3-3
第 3 页图片 4
图 3-4
第 3 页图片 5
图 3-5
第 3 页图片 6
图 3-6
第 3 页图片 7
图 3-7
第 3 页图片 8
图 3-8
第 3 页图片 9
图 3-9
第 3 页图片 10
图 3-10
第 3 页图片 11
图 3-11
第 3 页图片 12
图 3-12
第 3 页图片 13
图 3-13
第 3 页图片 14
图 3-14
第 3 页图片 15
图 3-15
第 3 页图片 16
图 3-16
第 3 页图片 17
图 3-17
第 3 页图片 18
图 3-18
第 3 页图片 19
图 3-19
第 3 页图片 20
图 3-20
第 3 页图片 21
图 3-21
第 3 页图片 22
图 3-22
第 3 页图片 23
图 3-23
第 3 页图片 24
图 3-24
第 3 页图片 25
图 3-25
第 3 页图片 26
图 3-26
第 3 页图片 27
图 3-27
第 3 页图片 28
图 3-28
第 3 页图片 29
图 3-29
第 3 页图片 30
图 3-30
第 3 页图片 31
图 3-31
第 3 页图片 32
图 3-32
第 3 页图片 33
图 3-33
第 3 页图片 34
图 3-34
第 3 页图片 35
图 3-35
第 3 页图片 36
图 3-36
第 3 页图片 37
图 3-37
第 3 页图片 38
图 3-38
第 3 页图片 39
图 3-39
第 3 页图片 40
图 3-40
第 3 页图片 41
图 3-41
第 3 页图片 42
图 3-42
第 3 页图片 43
图 3-43
第 3 页图片 44
图 3-44
第 3 页图片 45
图 3-45
第 3 页图片 46
图 3-46
第 3 页图片 47
图 3-47
第 3 页图片 48
图 3-48
第 3 页图片 49
图 3-49
第 3 页图片 50
图 3-50
第 3 页图片 51
图 3-51
第 3 页图片 52
图 3-52
第 3 页图片 53
图 3-53
第 3 页图片 54
图 3-54
第 3 页图片 55
图 3-55
第 3 页图片 56
图 3-56
第 3 页图片 57
图 3-57
第 3 页图片 58
图 3-58
第 3 页图片 59
图 3-59
第 3 页图片 60
图 3-60
第 3 页图片 61
图 3-61
第 3 页图片 62
图 3-62
第 3 页图片 63
图 3-63
第 3 页图片 64
图 3-64
第 3 页图片 65
图 3-65
第 3 页图片 66
图 3-66
第 3 页图片 67
图 3-67
第 3 页图片 68
图 3-68
第 3 页图片 69
图 3-69
第 3 页图片 70
图 3-70
第 3 页图片 71
图 3-71
第 3 页图片 72
图 3-72
第 3 页图片 73
图 3-73
第 3 页图片 74
图 3-74
第 3 页图片 75
图 3-75
第 3 页图片 76
图 3-76
第 3 页图片 77
图 3-77
第 3 页图片 78
图 3-78
第 3 页图片 79
图 3-79
第 3 页图片 80
图 3-80
第 3 页图片 81
图 3-81
第 3 页图片 82
图 3-82
第 3 页图片 83
图 3-83
第 3 页图片 84
图 3-84

本页图片

第 4 页图片 1
图 4-1
第 4 页图片 2
图 4-2
第 4 页图片 3
图 4-3
第 4 页图片 4
图 4-4
第 4 页图片 5
图 4-5
第 4 页图片 6
图 4-6
第 4 页图片 7
图 4-7
第 4 页图片 8
图 4-8
第 4 页图片 9
图 4-9
第 4 页图片 10
图 4-10
第 4 页图片 11
图 4-11
第 4 页图片 12
图 4-12
第 4 页图片 13
图 4-13
第 4 页图片 14
图 4-14
第 4 页图片 15
图 4-15
第 4 页图片 16
图 4-16
第 4 页图片 17
图 4-17
第 4 页图片 18
图 4-18
第 4 页图片 19
图 4-19
第 4 页图片 20
图 4-20
第 4 页图片 21
图 4-21
第 4 页图片 22
图 4-22
第 4 页图片 23
图 4-23
第 4 页图片 24
图 4-24
第 4 页图片 25
图 4-25
第 4 页图片 26
图 4-26
第 4 页图片 27
图 4-27
第 4 页图片 28
图 4-28
第 4 页图片 29
图 4-29
第 4 页图片 30
图 4-30
第 4 页图片 31
图 4-31
第 4 页图片 32
图 4-32

本页图片

第 5 页图片 1
图 5-1
第 5 页图片 2
图 5-2
第 5 页图片 3
图 5-3
第 5 页图片 4
图 5-4
第 5 页图片 5
图 5-5
第 5 页图片 6
图 5-6
第 5 页图片 7
图 5-7
第 5 页图片 8
图 5-8
第 5 页图片 9
图 5-9
第 5 页图片 10
图 5-10
全站分卷索引 · 8 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷
  7. 7第 7 卷
  8. 8第 8 卷