现状最佳实践 ES5_jQ前 + ES6_React后 (浏览器) , ios
① TS 太像 C# ,只看DENO成败。正则表达式
② Kotlin => JS 这种隔山打牛方式,估计不能彻底抛弃 JS 。优点在于 Spring Boot 和 Android App(不是安卓)小程序
③ Go Rust 的 WASM 技术 目前来说,性价比过低,还不如 GraphQL 带来的收益。windows
无论怎么说 Go 是"互联网"版本的 erlang ,DEVOPS 和 Cloud革命 DSL语言。net/http=>netty ,io基于stream,crypto微信小程序
④ 另外一条路 Flutter(uwp都投靠了)专吃移动端 => 肛的是 RN ,这是 F 和 G 家的广告之战。PC门户 和 后台 仍然没有大一统,因此须要 ES5 和 ES6。浏览器
PC 端是很是难统一的,百度都来了搞 兼容IE8的框架,可见一斑。微信
⑤ 最后国内现状 微信小程序 微信H5页面 ,都须要 ES5 和 ES6 。 (到这里,取决于作什么产品,后台固然能够 React ,门户就算了。)框架
⑥ Swift/Kotlin/C#/Dart 平台 原生渲染最佳,因此 Electron 适合业务/小工具,从业务量来说 ♥ 微信小程序 ♥ > H5游戏 > 安卓游戏 > ios游戏 > windows游戏 。函数
…………………………………………………………………………………………………………………………………………………………………………………………………………工具
变量 (使用 var 能够跨越窗口或帧 让全局对象访问到,使用 const let 不会污染全局做用域)
ES6 以前 , JS 的词法做用域的 变量提高 会把变量顶到函数/全局的顶部。
var funcs = []; for (var i = 0; i < 10; i++) { funcs.push(function() { console.log(i); }); } funcs.forEach(function(func) { func(); // 输出数值 "10" 十次 变量提高后 i 在context内部均可见,每次迭代都共享了 i 。 });
Ⅰ解决方式引入 IIFE 当即调用函数表达式 ,利用了传参 【值拷贝】
Ⅱ 引入块级做用域:let 和 const 根据规范定义 let 和 const 从新建立了 变量绑定(副本)。
使用 const 声明对象 == final 对象
temporal dead zone 社区给TDZ一个名字 叫暂时性死区。== 其实就是【变量脱离块级做用域】 是默认值是系统定义的 underfined ,没脱离则受 let const 影响。
…………………………………………………………………………………………………………………………………………………………………………
变化。
ES6 UTF-16 = BMP + SP = 单个16位码元不够标识 + 扩展码元 合计4字节
底层单位 Code Unit 16位码元 = BMP范围内(\u0000~\uffff) 适用API length/charAt/charCodeAt
扩展单位 Code Point = 两个码元 API codePointAt
var s = "𠮷"; s.length // 2 s.charAt(0) // '' s.charAt(1) // '' s.charCodeAt(0) // 55362 第一个码元 s.charCodeAt(1) // 57271 第二个码元
let s = '𠮷a'; s.codePointAt(0) // 134071 第一个代码点 = 两个码元组成标识 证实 String.fromCodePoint(13471) 就是 𠮷
s.codePointAt(1) // 57271 第一个代码点 的 第二个码元 s.codePointAt(2) // 97 第二个码元
字符串6种表示法
'\z' === 'z' // true '\172' === 'z' // true '\x7A' === 'z' // true '\u007A' === 'z' // true '\u{7A}' === 'z' // true
比较大小问题 怎么排序?使用 normalize方法
1、 把每一个字符串内容用map方法 normalize 一遍 , 再比较
var normalized = values.map(function(text) { return text.normalize(); }); normalized.sort(function(first, second) { if (first < second) { return -1; } else if (first === second) { return 0; } else { return 1; } });
2、直接将值 normalize 后比较,注重排序后的结果集。
values.sort(function(first, second) { var firstNormalized = first.normalize(), secondNormalized = second.normalize(); if (firstNormalized < secondNormalized) { return -1; } else if (firstNormalized === secondNormalized) { return 0; } else { return 1; } });
normalize(四种模式)
NFC NFD NFKC NFKD 怎么理解 (本身猜测,未经证明,实际根据业务选择 )
Canonical 根据规范相等 a=b b=a 根据规范能够互换
Compatibility 兼容 a 也能够 b 也能够 强调兼容
Composition 合成 ae æ 能够是黏在一块儿的,确实有的字是合成的 好比 陶喆 的 喆。
Decomposition 分解 ae ae
正则表达式 固然也要跟着 code point 转~~
console.log(/^.$/u.test('𠮷')); // true