《学习JavaScript数据结构与算法》笔记

第一章 JavaScript基础

数据类型

简单数据类型:数、字符串、布尔值、undefined、null、symbol

复杂数据类型:数组、函数、对象、日期、正则表达式

null表示变量没有值(手动赋值了null),undefined表示未赋值

1
2
3
4
5
function fn(b=1){
console.log(b)
}
fn(null); // null
fn(undefined); // 1

运算符

算数运算符:+-*/%++--

赋值运算符:=+=-+*=/=%=

比较运算符:=====!=>>=<<=

逻辑运算符:&&||!

位运算符:&|~^<<>>

位运算符相关操作见:JavaScript 位运算符 (w3school)

真值和假值

数值类型 转换成布尔值
undefined false
null false
布尔值 true为true,false为false
数字 +0、-0、NaN为false,其他为true(包括负数)
字符串 根据长度判断,0为false,其余为true
对象 true

⚠️JS对象在判断中永远为true,因此不适合直接用于判断

相等运算符

…(挖坑待补)

控制结构

条件语句:if...else

循环:forwhiledo...while

函数

函数参数可以使用arguments访问

JavaScript面向对象编程

classFunction.prototype

第二章 ECMAScript和TypeScript

ES2015<–>ES6

ES2016<–>ES7

ES2017<–>ES8

ES2018<–>ES9

ES.Next

ES6新功能

  • let、const:①局部作用域;②let不允许重复定义;③const必须在声明时赋值

  • 模版字面量:{book.name}

  • 箭头函数:(a)=>{return a+1} ①简化:a=>a+1;②this指向

  • 默认参数:ES6之前,设置默认参数需要在函数内使用if(x===undefined) x=1

  • 展开运算符:...①展开数组;②代替arguments接收参数fn(a,b,...x)

  • 对象属性增强:①数组解构:let [x,y] = ["a","b"];②属性简写:{x:x,y:y}写为{x,y}

  • 使用类进行面向对象编程:①使用class而不是function原型函数表示类并实例化;②继承:class A extends B{};③属性存取器getset

  • 乘方运算符:2**3 = 8

  • 模块化:①export {}=>import {} from "X.js";②export ...; export...;=>import * as XXX from "X.js"export default ...=>import ... from "X.js

TypeScript

见博客文章 TS总结

第三章 数组

  • 最好用来存储同一种类数据(虽然JS数组可以存储不同类型元素),数组是可修改、动态增长的

创建数组

1
2
3
4
5
6
7
8
9
let arr = new Array(); // 创建空数组
let arr = new Array(n); //创建含有n个元素的数组,元素值为空
let arr = new Array("1","2","3"); // 根据元素直接创建数组
let arr_ = Array.from(arr)
let arr_ = Array.of(...arr)

let a = []
a[3] = 1
console.log(a) // [ <3 empty items>, 1 ]

数组方法

  • push、pop、shift、unshift

  • concat、every、filter、forEach、join、indexOf、lastIndexOf、map、reverse、slice、some、sort、toString、valueOf

  • ES6新增:@@iterator、copyWithin、entries、includes、find、findIndex、fill、from、keys、of、values