前言
- 浮点数以 IEEE754 为标准
- JS 表示的小数会不精确,这不是 JS 的问题,是标准的问题。所以遵循 IEEE754 标准的语言都有这个问题
-
表达式
Member Expression(成员访问,属性访问)
- 优先级
- 树实现的
- a.b
- a[b]
- super
- new.target 可以用来判断用原型创建的对象是不是 new 出来的实例
- 一般库的作者会用的到
- foo
hello ${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
-- Member Expression 都是 reference2. New Expression1. new NewExpression3. Call Expression- foo()- foo()['b']- new foo()['b'] 先 new 再取 'b'- foo().b4. left handside & right handside- 等号的左右- 左边必须是 reference- a++ b--c 不能有换行和多行注释5. 单目运算符1. delete1. void - 必定返回 undefined1. typeof1. + a1. - a1. ! a1. !! 可以用来做类型转换成 true/false7. ~ a7. await7. exponental 乘方, 唯一的右结合运算符 **6. 立即执行表达式()```javascript// var 定义变量导致控制台永远输出 10for (var i = 0; i < 10; i++) {var btn = document.createElement("button")document.body.appendChild(btn)btn.innerHTML = ibtn.onclick = function(){console.log(i);}}// let 定义变量没问题for (let i = 0; i < 10; i++) {let btn = document.createElement("button")document.body.appendChild(btn)btn.innerHTML = ibtn.onclick = function(){console.log(i);}}// 或者用立即调用表达式, 推荐用 void 代替 (), 防止第三方工具合并代码没有分号导致的问题;理论上任何符号都可以for (var i = 0; i < 10; i++) {var btn = document.createElement("button")document.body.appendChild(btn)btn.innerHTML = i(function(){btn.onclick = function(){console.log(i);}})(i)// 推荐void function(){btn.onclick = function(){console.log(i);}}(i)}
