1. JavaScript 基础

1.1 真值和假值

数值类型 转换成布尔值
undefined false
null
false
布尔值 true是true,false是false
数字 +0、-0和NaN都是false,其他都是true
字符串 如果字符串长度为0就是false,否则是true
对象 true

1.2 相等和全等操作符

1.2.1 相等操作符 ==

如果是相同类型,则比较值,否则其他不在下表中的情况都返回 false。

类型(x == y) 结果
null == undefined true
字符串 == 数字 toNumber(y) == x
布尔值 == 任何类型 toNumber(x) == y
对象 == 字符串或数字 toPrimitive(x) == y

1.2.2 全等操作符 ===

类型不同都是false,类型相同则比较值或者是否引用同一对象,除了 NaN !== NaN。

1.3 控制语句

if…else switch while do…while for
注意 swtich 的值和 case 是采用全等 === 进行比较;do…while 至少会让循环体中的代码执行一次

1.4 JavaScript 面向对象编程

JavaScript 里的对象就是普通名值对的集合,后面创建的所有的类,如 Stack、Set、LinkedList、Dictionary、Tree、Graph 等,都是 JavaScript 对象。

1.5 ES6 的新功能

var、let、模板字符串、箭头函数、函数的参数默认值、声明展开和剩余参数,Set、Map、WeakSet、WeakMap、Symbol 等等。
数组解构进行值的交换:[x, y] = [y, x]。

1.5.1 使用类进行面向对象编程

  1. function Book(title, pages) {
  2. this.title = title;
  3. this.pages = pages;
  4. }
  5. Book.prototype.printTitle = function() {
  6. console.log(this.title);
  7. };

使用 ES6 Class 进行简化:

  1. class Book {
  2. constructor(title, pages) {
  3. this.title = title;
  4. this.pages = pages;
  5. }
  6. printTtile() {
  7. console.log(this.title);
  8. }
  9. }

继承:
使用 extends 关键字扩展一个类并继承它的行为,在构造函数中,通过 super 关键字引用父类的构造函数。
当然,JS 中的面向对象编程是基于原型实现的,并不是真的和 Java、C++ 一样。

  1. class ITBook extends Book {
  2. constructor(title, pages, technology) {
  3. super(title, pages);
  4. this.technology;
  5. }
  6. printTechnology() {
  7. console.log(this.technology);
  8. }
  9. }
  10. let jsBook = new ITBook('学习js算法', '200', 'JavaScript');