TypeScript
  1. 概述
     - 编译代码    
     - tsc greeter.ts 输出一个JavaScript文件
     
     - 类型注解     
    - 接口和类    
     - 基于类的面向对象编程
      - ts的类只是js常用的基于原型面向对象编程的简写
     
    
  2. 基础类型
    let arr: any[] = [1, 'a', true];
     - number,双精度64位
    - string
    - boolean
    - 数组
   
  let arr: number[] = [1,2];
let arr: Array<number> = [1,2];
    enum Color {Red, Green, Blue};
let c: Color = Color.Blue;
     - void 空返回值
    - null空对象引用,typeof null 返回 object
    - undefined
    - never
    - 类型断言Type asserting
    - 类型推断
    - 类作用域 —> 字段
   
  3. 运算符
     - 算术     
    - 逻辑    
     - 与&&、或||、非!
      - 短路 —> 替代判断语句if
     
     - 关系    
     - 关系运算符用于计算结果是否是true或false
      - (==、!=、>、<、>=、<=)
     
     - 按位    
     - 与 & —> 和0与就是置零、清空、忽略指定位
      - 或 | —> 和1或就是置一
      - 非 ~ —> ~~取整
      - 异或 ^ —> 和0异或是本身;和全一异或是取反
      - 左移 << —> 左右移可以做进制转换,比如rgb和hex的转换
      - 右移 >>
      - 无符右移 >>>
     
     - 赋值    
     - = 是正常赋值
      - (+=、-=、/=、*=)都是自我更新式赋值运算符
     
     - 条件/三元     
    - 类型运算符     
    - 其他运算符     
   
  4. 循环
     - for(init; condition; increment)    
     - init 只执行一次,声明并初始化循环控制变量
      - condition 第一次不满足直接不进入循环体,更不会进入increment
      - increment 用于更新控制变量,执行完一遍循环体,才会进入increment
     
     - break    
     - 终止当前循环,程序流继续执行紧接着循环的下一条语句
      - 终止switch语句中的case(不管case对不对,每个case中的语句都会被执行一遍,直到遇到一个break)
     
     - continue     
   
  5. 函数
     - 可选参数和默认参数    
     - 可选参数 ?      
       - ts中,定义了参数就必须传入这些参数
        - 参数不能多于定义的数目
        - 可以省略带?的可选参数
       
       - 默认参数 =       
     
 function buildName(firstName: string = 'Jack', lastName?: string = 'Bob'){
	
	
}
         - 剩余参数 Rest Arguments      
       - ES6特性
        - 允许我们将剩余参数当做一个数组调用
        - 区别于 … 扩展运算符
        - 经典应用,加和任意个元素
       
      
 function addNumbers(...nums: number[]){
	var result = 0;
	for(let n of nums){
		result += n;
	}
	return result;
}
     - 递归函数     
    - 匿名函数 AF anonymous function    
     - 函数表达式 var f = function(){};
      - 函数自调用(立即调用表达式IIFE)
      - 构造函数Function
     
 var myFunction = new Function('a', 'b', 'return a * b');
         - lambda表达式       
      - 重载      
       - 先声明所有可能的独立的参数列表
        - 然后在函数体内实现的时候根据类型判断做不同的事(很蠢)
        - 参数类型不同
       
 function myFunction(value: string): void;
function myFunction(value: number): void;
       function myFunction(a: number, b: string): void;
function myFunction(a: number): void;
       function myFunction(a: number, b: string): void
function myFunction(b: string, a: number): void
      
    
  6. Number封装对象
     - 属性(成员变量)    
     - MAX_VALUE
      - MIN_VALUE
      - NaN
      - NEGATIVE_INFINITY
      - POSITIVE_INFINITY
     
     - 方法    
     - toExponential() 指数计数法
      - toFixed() 转换成字符串,并且保留小数位
      - toLocaleString() 转换成字符串,本地数字格式
      - toPrecision() 转换成字符串,有效数字
      - toSting() 转换成字符串,进制转换
      - valueOf() 原始数字值
     
    
  7.String封装对象
     - 属性    
     - constructor 构造函数引用
      - length 长度
     
     - 方法    
     - charAt() 指定位置的字符
      - charCodeAt() 指定位置的字符的unicode
      - concat() 连接多个字符串,并返回新的字符串
      - indexOf() 某个字符串值的首位置
      - lastIndexOf() 某个字符串值最后一次出现的位置
      - match() 查找匹配正则,以数组返回所有
      - localeCompare() 比较大小(按字母顺序)
      - replace() 替换,可字符串可正则
      - search() 正则版的indexOf
      - slice(start,end) 割取(复制)含首不含尾
      - split(seperator, howmany) 分割
      - substr(start, howmany)
      - subString(start, end) 似乎基本等于slice
      - toLocaleLowerCase()/toLowerCase() 小写
      - toLocaleUpperCase()/toUpperCase() 大写
      - toString() 转换成字符串
      - valueOf() 返回原始值
     
    
  8. Array 数组
     - 解构赋值(ES6)
    - 多维数组 multi-dimensional array
    - 方法    
     - concat() 返回结果,不改变原数组
      - every() every true
      - some() some true
      - filter() filter true
      - forEach() 不改变原数组
      - indexOf()
      - lastIndexOf()
      - join(seperator) 聚合成一个字符串
      - map() 改变原数组
      - pop() 返回弹出的元素
      - push() 返回新的长度
      - shift() 从头pop
      - unshift() 从头push
      - reduce() 降维
      - reduceRight()
      - reverse() 倒序
      - slice() 复制,不改变原数组
      - sort()
      - splice(start, howmany, added) 删,返,添;改变原数组;      
       - 返回值是删掉的元素,原数组中被删掉的位置上填入要新增的元素
       
       - toString() 返回的是不带方括号的元素序列,以逗号分隔
     
    
  9. ts特有概念
     - Union Types 联合类型    
     - 使用管道符 | 
number[] | string[]     
     - interface 接口     
    - Class 类    
     - 字段 field (属性/成员变量)
      - 方法 method(方法/成员函数)
      - 构造函数 constructor 类实例化调用,为类的对象分配内存
      - static 定义静态 属性 和 方法
      - instanceof
      - 访问控制符      
       - public 全世界
        - protected 家族(后代)
        - private 个人
       
       - 类实现接口 implements
     
     - 类型模板    
     - 不能动态添加属性和方法
      - 必须在定义对象的时候就规定好其属性和方法
     
     - 命名空间    
     - namespace
      /// <reference path="xxx.ts" />     
     - 模块    
     - 两个模块之间的关系是在文件级别上使用import和export
      - 模块使用模块加载器导入其他模块      
       - 模块加载器的作用是在执行此模块代码之前去查找这个模块的所有依赖
        - NodeJs 的 CommonJs
        - Web应用 的 RequireJs
        - webpack
       
       import xxx = require('xxx');     
     - 声明文件