現狀最佳實踐 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