ES6知识学习系列(一)

394 阅读4分钟

前言🎃

ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。

学习ES6主要学习与ES5的不同之处,或者是新增的规范。

主要内容🎃

  • 块级绑定
  • 字符串与正则表达式

思维导图🎃

image.png

块级作用域🎃

var声明与变量提升🎃

//所在函数的顶部
//不在函数内部,默认在全局作用域

循环内的块级绑定🎃

  • 循环内的函数
//用IIFE var
//循环内的let
  • 循环内的常量声明
//const会根据循环的不同方式有不同表现
//for循环会报错
//for-in for-of每次迭代创建了一个新的变量绑定

块级声明🎃

  • 词法作用域
//声明的变量在指定会计作用域外无法访问
  • let声明
//声明之后才可以使用,不然就会报错(暂时性死区)
//不存在变量提升
//禁止重复声明
  • 常量声明
//const声明,会阻止变量自身修改
  • 暂时性死区
//TDZ只有执行到变量的声明语句时,该变量才会从暂时性死区内被移除并可以安全使用。
//全局块级绑定let或const,虽然在全局作用域上会创建新的绑定,但不会有任何属性被添加到全局对象上。
//这也就意味着你不能使用 let 或 const 来覆盖一个全 局变量,你只能将其屏蔽。
//使用 var 可能会无意覆盖一个已有的全局属性块级绑定新的最佳实践

字符串与正则表达式🎃

更好的 Unicode 支持🎃

//原来:es5之前使用(USC-2),字符串以16位编码(1个码元),每16位代表一个字符,原来是够用的,后来由于unicode引入了扩展集字符,不够了。

UTF-16 代码点🎃

//码元
//代码点
//UTF-16 引入了代理对,意味着单个字符可能用一个码元或者2个码元来表示一个代码点。
//因此,UTF-16有两种方式,一种是16位,另一种是32位。16位对应基本平面字符(BMP),32位对应扩展平面字符。

代码测试:

//2^16 = 65536
//2^32 = 4 294 967 296
var text = ';'
text.charCodeAt()//59
'𠮷'.codePointAt(0) // 134071 
'😊'.charCodeAt()//55357
'a'.charCodeAt()//97

codePointAt() 方法🎃

//字符串的一个方法:返回一个 Unicode 编码点值的非负整数 。
//Surrogate Pair是UTF-16中用于扩展字符而使用的编码方式,
//是一种采用四个字节(两个UTF-16编码)来表示一个字符,称作代理对。

代码测试:

'ABC'.codePointAt(1);          // 66
'\uD800\uDC00'.codePointAt(0); // 65536

String.fromCodePoint() 方法🎃

//借助 String.fromCodePoint() 用给定的代码点来产生包含单个字符的字符串

代码测试:

String.fromCodePoint(134071);//𠮷

normalize() 方法 🎃

//按照指定的一种 Unicode 正规形式将当前字符串正规化
//当比较字符串时,它们必须被标准化 为同一种形式

正则表达式 u 标志🎃

  • u 标志如何运作
//当一个正则表达式设置了 u 标志时,它的工作模式将切换到针对字符,而不是针对码元。
//这意味着正则表达式将不会被字符串中的代理对所混淆,而是会如预期那样工作。
//正则表达式 /^.$/ 会匹配只包含单个字符的任意输入字符串。
//当不使用 u 标志时,该正则表达式只匹配码元,所以不能匹配由两个码元表示的这个日文字符。
//启用 u 标志后,正则表达式就会比较字符而不是码元,所以这个日文字符就会被匹配到。
  • 计算代码点数量
function codePointLength(text) { 
    var result = text.match(/[\s\S]/gu);
    return result ? result.length : 0;
}
console.log(codePointLength("abc")); // 3 
console.log(codePointLength("bc" )); //2
  • 判断是否支持 u 标志
function hasRegExpU() { 
    try {
            var pattern = new RegExp(".", "u"); return true; 
        } catch (error) { 
            return false; 
        } 
}

字符串的其他改动 🎃

  • 识别子字符串的方法
//includeOf()
//includes()
  • startWith()
//从给定文本的起始处判断是否包含,包含返回true,否则为false
  • endsWith()
//从给定文本的结尾处判断是否包含,包含返回true,否则为false(从结尾处开始查找)
  • 想要找到具体位置,要用以下方法
indexOf() 和 lastIndexOf()
  • repeat() 方法
//复制一段字符串的方法
console.log("a".repeat(3)); // "aaa"
console.log("hell".repeat(2)); // "hellhell"
console.log("abc".repeat(4)); // "abcabcabcabc"

正则表达式的其他改动🎃

// 正则表达式 y 标志 
// 复制正则表达式 
// flags属性 

模板字面量 🎃

//基本语法 
//多行字符串
//制造替换位 
//标签化模板 

感受心得🎃

通过这段时间学习,明白自己技术的欠缺在哪里,知识点不够细化和深入,只停留在表面。后期一定加强复习与梳理。

今天就这样了,拜拜👋🏻