nodebook/Miscellaneous/javascript2.md
2020-03-03 20:37:08 +08:00

3.4 KiB
Raw Blame History

javascript 学习总结

基础

  • 输入prompt(...)
  • 比较
    • 如果两边任意一边出现 true 或者 false 使用 ===
    • 如果两边任意一边可能是特定值0,"", [] 使用 ===
    • 剩下的所有情况,使用 ==
    • 对于引用类型来说,比较仅仅是比较其引用是否是同一个,另外在和字符串比较时,数组会自动转成字符串
    var a = [1,2,3]
    var b = [1,2,3]
    var c = "1,2,3"
    console.log(a == b) // false
    console.log(a == c) // true
    console.log(b == c) // true
    
    • switch语句
    switch(a) {
      case 2:
      case 10:
        // 2 或者 10 执行
        break;
      default:
        // 条件都不满足默认执行
    }
    

ES6

  • let 尽量将变量声明放在代码块开始,避免在(Temproal Dead Zone, TDZ)临时死亡区使用而报错
    • 尽量使用for...let在每次循环中都会声明一个新的变量生成了一个闭包。避免for里边的函数在调用的时候引用不到正确的变量。
  • const声明相对于保护其中的内容更注重其语意所带来的规范性
  • 如果把方法定义在{}内那么在块外执行会报ReferenceError
  • spread/rest...放在数组前用于展开数组,放在变量前就是收集变量到一个数组里,例如 function a(...arg){} a(a,b,c) -> arg = [a,b,c]
  • 解构 var [a, b, c] = foo() 如果foo返回的是一个长度为三的数组其内容将会被依次赋值给abc
    • 对象属性复制模式var {a, b, c} = foo()这里省略的其实是a:, b:, c:,对象的属性名要和函数返回的属性名相同,然后将值一一赋值给属性值var {a: x, b: y, c: z} = foo()最后使用的是xyz而不是abc
      • 对于这个形式,如果省略声明符就需要用小括号括起来({a, b, c} = foo())
    • 对象属性名的计算属性var which = 'w'; o1 = {which: 'w'}; => {which: 'w'} o2 = {[which]: 'w'}; => {w: 'w'}使用中括号即可
    • 简单的交换两个元素[a, b] = [b, a]'
    • 允许出现多次列出同一个源属性{a: {x: X, x: Y}, a} = {a: {x: 1}} => X == X == 1, a = {x :1}
    • 不必都写在一行里,解构的目的不是为了打字更少,而是为了可读性更强
    • 赋值的时候用不到的东西可以抛弃[,a,b] = [1, 2, 3] => a = 2, b = 3
    • 赋值的时候多余的东西会赋值undefined[a, b] = [1] => a = 1, b = undefined
    • 赋值的时候可以使用spread/rest...进行收集操作[...a,b] = [1, 2, 3] => a = [1, 2], b = 3
    • 赋值的时候可以使用默认值{a, b: WW = 20} = {a: 10} => a = 10, WW = 20
    • 赋值的时候可以嵌套结构
    • 在形参中使用这个就接近了命名参数,得到了任意位置的可选参数功能,设置默认参数{x = 10} = {}
  • 对象字面量扩展
    • 简洁属性{x}
    • 简洁方法{x(){}}
      • 这个操作会生成一个匿名的函数,如果需要递归请不要使用
  • 模板字面量...${foo(`${name}s`)}
      function foo(strings, ...args) {
        console.log(strings)
        console.log(args)
      }
      var desc = "awesome"
      foo`Every thing is ${desc}!`
      // ["Every this is ", "!"]
      // ["awesome"]
      // 配合Strng.resuce可以用来处理字符串
    
  • 箭头函数
    • 合理使用,函数越短越适合用,函数长了反而会使函数边界模糊
    • 主要的功能是为了this的规范化而不是减少代码量
    • 尽可能减少非必要情况下的箭头函数使用