ES6 笔记

现状最佳实践  ES5_jQ前  + ES6_React后   (浏览器)   ,   

① TS 太像 C# ,只看DENO成败。

② Kotlin => JS 这种隔山打牛方式,估计不能完全抛弃 JS 。优势在于 Spring Boot 和 Android App(不是安卓)

③ Go Rust 的 WASM 技术 目前来讲,性价比太低,还不如 GraphQL 带来的收益。

  不管怎么说 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方法

 

一、 把每个字符串内容用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;
}
});

 

二、直接将值 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

 

posted @ 2018-07-10 07:58  chenhui7373  阅读(143)  评论(0编辑  收藏  举报