前言

  1. 浮点数以 IEEE754 为标准
  2. JS 表示的小数会不精确,这不是 JS 的问题,是标准的问题。所以遵循 IEEE754 标准的语言都有这个问题
  3. 尽量不要对浮点数进行运算,会多次精度丢失

    表达式

  4. Member Expression(成员访问,属性访问)

    • 优先级
      • 树实现的
      • a.b
      • a[b]
      • super
      • new.target 可以用来判断用原型创建的对象是不是 new 出来的实例
        • 一般库的作者会用的到
      • foohello ${name}
        • foo是函数的话会接收到2个参数,一个是字符串模板的数组,一个是参数
      • new foo() 优先级高于 new foo ```javascript function clz1(s){ console.log(s); }

function clz2(s){ console.log(“2 “, s); return clz1 }

new new clz2(“good”); // good 优先传给 clz2 // 等价于 let clz = new clz2(“good”) new clz

  1. -
  2. - Member Expression 都是 reference
  3. 2. New Expression
  4. 1. new NewExpression
  5. 3. Call Expression
  6. - foo()
  7. - foo()['b']
  8. - new foo()['b'] new 再取 'b'
  9. - foo().b
  10. 4. left handside & right handside
  11. - 等号的左右
  12. - 左边必须是 reference
  13. - a++ b--c 不能有换行和多行注释
  14. 5. 单目运算符
  15. 1. delete
  16. 1. void - 必定返回 undefined
  17. 1. typeof
  18. 1. + a
  19. 1. - a
  20. 1. ! a
  21. 1. !! 可以用来做类型转换成 true/false
  22. 7. ~ a
  23. 7. await
  24. 7. exponental 乘方, 唯一的右结合运算符 **
  25. 6. 立即执行表达式()
  26. ```javascript
  27. // var 定义变量导致控制台永远输出 10
  28. for (var i = 0; i < 10; i++) {
  29. var btn = document.createElement("button")
  30. document.body.appendChild(btn)
  31. btn.innerHTML = i
  32. btn.onclick = function(){
  33. console.log(i);
  34. }
  35. }
  36. // let 定义变量没问题
  37. for (let i = 0; i < 10; i++) {
  38. let btn = document.createElement("button")
  39. document.body.appendChild(btn)
  40. btn.innerHTML = i
  41. btn.onclick = function(){
  42. console.log(i);
  43. }
  44. }
  45. // 或者用立即调用表达式, 推荐用 void 代替 (), 防止第三方工具合并代码没有分号导致的问题;理论上任何符号都可以
  46. for (var i = 0; i < 10; i++) {
  47. var btn = document.createElement("button")
  48. document.body.appendChild(btn)
  49. btn.innerHTML = i
  50. (function(){
  51. btn.onclick = function(){
  52. console.log(i);
  53. }
  54. })(i)
  55. // 推荐
  56. void function(){
  57. btn.onclick = function(){
  58. console.log(i);
  59. }
  60. }(i)
  61. }