JavaScript全栈教程-学习笔记1

  1. 1. 快速入门
  2. 2. 函数
  3. 3. 标准对象

JavaScript全栈教程-学习笔记系列第一篇

  • 快速入门
  • 函数
  • 标准对象

快速入门

  1. 字符串:模板字符串(ES6新增)
  2. 数组:
    • length赋新值会导致Array大小的变化
    • slice()unshift()shift()splice()万能方法
  3. 对象:
    • delete object.prop删除属性
    • in操作符判断是否有一属性(可能是继承得到的)
    • hasOwnProperty()是自身拥有的
  4. Map和Set是ES6标准新增的数据类型
  5. iterable
    • 具有iterable类型的集合可以通过for ... of循环来遍历
    • for ... of循环和for ... in循环的区别:for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称;for ... of只循环集合本身的元素
    • iterable内置的forEach方法

函数

  1. 函数的定义和作用
    • 关键字arguments,它只在函数内部使用,指向当前函数的调用者传入的参数。arguments最常用于判断参数的个数
    • ES6标准引入了获得额外参数的rest参数,rest参数只能写在最后,前面用…标识
    • JavaScript引擎会在行末自动添加分号的机制,如果return语句拆成两行,可能会出错
  2. 变量作用域与解构赋值
    • 变量提升
    • 全局作用域:JavaScript默认有一个全局对象windowalert()函数其实也是window的一个变量
    • 名字空间
    • 局部作用域:变量作用域实际上是函数内部,为了解决块级作用域,ES6引入了新的关键字let
    • 常量:ES6引入了关键字const来定义常量,constlet都具有块级作用域
    • 解构赋值,可以同时对一组变量进行赋值
  3. 方法
    • 方法内部的this可能指向undefined,通过一个that变量首先捕获this
    • 要指定函数的this指向哪个对象,可以用函数本身的apply()call()apply()类似,apply()把参数打包Array再传入,call()把参数顺序传入
  4. 高阶函数:map()reduce()filter()sort()
  5. 闭包(函数作为返回值)
    • 返回函数不要引用任何循环变量,或者后续会发生变化的变量
    • 如果一定要引用循环变量,可以再创建一个函数,用该函数的参数绑定循环变量当前的值
    • 闭包作用:封装私有变量、把多参数的函数变成单参数的函数
  6. 箭头函数(ES6标准)
    • 箭头函数和匿名函数的区别:箭头函数内部的this是词法作用域,由上下文确定。
  7. generator
    • generator由function*定义,并且除了return语句,还可以用yield多次返回
    • 调用generator对象有两个方法,一是不断调用next()方法,每次遇到yield x;,返回一个对象{value: x, done: true/false};二是直接用for ... of循环迭代generator对象
    • generator作用:用一个对象来保存状态;把异步回调代码变成"同步代码"

标准对象

  1. nullArray的类型也是object,无法用typeof区分出nullArray和普通的object–{}

  2. 包装对象用new创建,包装对象和原始值用===比较会返回false,所以尽量不要使用包装对象,尤其是针对string类型

  3. 如果使用NumberBooleanString时没有写newNumber()String()等会被当做普通函数,把数据转换为numberbooleanstring类型

  4. parseInt()parseFloat()来转换任意类型到number;用String()来转换任意类型到string,或者调用对象的toString()方法,注意number对象调用toString()报SyntaxError,要特殊处理一下:

    1
    2
    3
    123..toString();  //'123',注意是两个点!

    (123).toString();
  5. typeof操作符可以判断出numberbooleanstringfunctionundefined;判断Array要使用Array.isArray(arr);判断null要使用myVar === null

  6. 判断全局变量是否存在typeof window.myVar === 'undefined';函数内部变量是否存在使用typeof myVar === 'undefined'

  7. Date对象月份值从0开始,0=1月…,11=12月

  8. 创建Date对象的3种方式:

    1
    2
    3
    4
    5
    var d1 = new Date(2015, 5, 19, 20, 15, 30, 123)

    var d2 = Date.parse('2015-06-24T19:49:22.875+08:00')

    var d3 = new Date(1435146562875)

    使用Date.parse()时传入的字符串使用实际月份0112,转换成Date对象使用getMonth()获取的月份是011

  9. d.toLocaleString():本地时间,显示的字符串与操作系统设定的格式有关,d.toUTCString():UTC时间