ECMAScript6 简介及拓展

这篇具有很好参考价值的文章主要介绍了ECMAScript6 简介及拓展。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ECMAScript简介


JavaScript是大家所了解的语言名称, 但它的正式名称叫做ECMAScript

1996年11月, JavaScript的创造者网景公司将JavaScript提交给国际化组织 ECMA(欧洲计算机制造联合会), 希望这种语言能够成为国际标准。

随后 ECMA 发布了规定浏览器脚本语言的标准, 即ECMAScript。 它的历史版本:

version 时间 描述
1.0 1997 诞生,制定了语言的基本语法
2.0 1998 较小改动,同步独立的ISO国际标准
3.0 1999 引入正则,异常处理,格式化输出等。在业界得到了广泛的支持, 奠定了JS的基本语法
4.0 2000 过于激进,未发布
5.0 2009 引入严格模式,Json,扩展对象,数组,原型,字符串,日期方法
6.0 2015 模块,面向对象语法,Promise,箭头函数,let,const,数组解构赋值等
7.0 2016 幂运算符,数组扩展,Async/await关键字
8.0 2017 Async/await,字符串扩展
9.0 2018 对象解构赋值,正则扩展
10 2019 扩展对象,数组方法

ES6


目前市面上推荐使用的是ECMAScript 6.0(ES6), 主要原因在于:

  • 兼容性 目前并非所有的浏览器相关都支持最新语言的特性,而ES6已经被广泛支持。并可通过转译工具可将ES6转换为较低版本的JavaScript,以确保在各种环境中的运行
  • 新特性 ES6引入了箭头函数,解构赋值,类等,使得代码更加简洁、易读和维护
  • 模块化支持 可以提升代码的复用性和可维护性,使得项目结构更清晰
  • 异步编程 引入Promiseasync特性, 支持异步编程

ES6的推广主要还是为了解决ES5的不足,目前浏览器的JavaScript虽是ES5版本,但大多数的高版本浏览器支持ES6的使用。

它又被称为ES2015, 因为它是2015年发布的。

ES6所支持的新特性简要说明下:

  • 增加letconst, 可用于块作用域声明变量,避免了var变量提升和作用域不明的问题
  • 新增的原始数据类型Symbol, 可用于定义对象的唯一属性
  • 增加了解构赋值的语法, 使得代码更加简洁和易于理解
  • 拓展了Number,支持二/八进制表示,增加了isFinite,整合了parseInt方法等
  • 拓展了String,新增了子字符串的识别, 模版字符串的拼接等
  • 拓展了Array, 增加了对象转换为数组,以及查找的方法相关
  • 拓展了函数的默认参数设置, 箭头函数等
  • 新增Map容器和Set对象的使用
  • 新增ProxyReflect
  • 引入class类的支持, 支持extends继承, super访问父类规范, 静态方法等
  • 引入模块, 主要分为export导出import导入
  • 引入 Generator , Promise和 async 等异步编程

let、const和Symbol


ES6之前只有全局变量函数内局部变量letconst为新增关键字:

  • let 必须在声明之后才能使用, 不可重复声明, 块作用域, 变量不能提升
  • const 声明之后必须初始化,否则会报错。 且声明后不允许改变,属于只读变量。
// ---------- let -------------
{
    let value = 0;
    console.log(value);     // 0
}
// Error: value is not defined 
console.log(value);

// ---------- let -------------
const value: number = 10;
// Error: Assignment to constant variable
value = 100;

经常会拿varlet比较:

/*
var是ES5及之前的JavaScript的关键字,特点:
* 函数作用域,声明的变量在整个函数体内, 而不仅是在块作用域内
* 变量会提升,声明的变量会提升到函数的顶部, 即可在声明之前使用
* 允许重复声明
*/
function example() {
  var x = 10;
  if (true) {
    var x = 20; // 在同一函数作用域内重复声明变量x
    console.log(x); // 输出:20
  }
  console.log(x); // 输出:20
}
example();

/*
let是ES6及之后的JavaScript和TypeScript引入的关键子,特点:
* 块作用域, 比如if语句,循环语句,并不是整个函数体内
* 不存在变量提升,必须声明之后才能使用
* 不允许重复声明,否则会报错
*/
function example2() {
  let y = 10;
  if (true) {
    let y = 20; // 在块级作用域内声明变量y
    console.log(y); // 输出:20
  }
  console.log(y); // 输出:10
}
example2();

const需要注意,所谓的不允许改变真正指的是:变量或引用所指向的内存地址不可改变

在基础数据类型使用中,值就保存在变量指向的地址。
而对于类似于Array数组,Object对象等这些复杂类型, 对象内的子元素是可改变的

// ------------ 数组 ------------
const numData = [1, 2];
// 允许插入数值
numData.push(3);
console.log(numData);
// 不允许改变对象,Assignment to constant variable
numData = [4, 5];

// ------------ object ------------
const objectData = {
    value: 1,
}
// 允许修改对象内部元素
objectData.value = 2;
// 不允许改变对象,Assignment to constant variable
objectData = {value: 2};

Symbol

除了number, string, boolean, object, null, undefined外, Symbol为新增的原始数据类型。

它被用于表示独一无二的值,可被用于定义对象的唯一属性名,构成:

// lib.es2015.symbol.d.ts
interface SymbolConstructor {
  readonly prototype: Symbol;
  // 创建symbol对象
  (description?: string | number): symbol;
  // 全局搜索指定key字符串的symbol对象
  for(key: string): symbol;
  // 获取symbol对象的key, 如果没有则undefined
  keyFor(sym: symbol): string | undefined;
}

declare var Symbol: SymbolConstructor;

基本使用:

let sym = Symbol("a_1");
console.log(typeof(sym), sym);  // "symbol",  Symbol(a_1)

主要用法:

  • 定义常量,保证不同常量的唯一性
  • 作为对象的属性名, 使用[]来设定,不要使用.

简单的实例:

let sy = Symbol("key1");

let obj = {
  [sy]: "kk",
  value: 10,
};
// 虽然作为对象的属性名,但其实是不可读的, 结果是:{"value": 10}
console.log(obj); 

解构赋值

它是对赋值运算符的扩展, 可用于 数组对象 进行模式匹配, 然后对其中的变量进行赋值。

// 基本使用
let [a, b, c] = [1,2,3];
console.log(a, b, c);       // 1,  2,  3 
let {a, b, c} = {a:1,b:2,c:3};
console.log(a, b, c);       // 1,  2,  3 

// 嵌套使用
let [a, [b, c]] = [1, [2, 3]];
console.log(a, b, c);  // 1,  2,  3 
let [A, [[B], C]] = [1, [[2], 3]];
console.log(A, B, C);  // 1,  2,  3 

// 忽略
let [a1, , c1] = [1, 2, 3];
console.log(a1, c1);    //  1,  3 
let [, b2, , d2] = [1,2, 3,4];
console.log(b2, d2);    // 2,  4 
let [a3, [, b3], [,,c3]] = [1, [2,3], [4,5,6]];
console.log(a3, b3, c3);    // 1,  3,  6 

支持不完全解构,可以做个简单了解,但不推荐使用,会有报错

// Error: Tuple type '[number]' of length '1' has no element at index '1'
let [a1, b1] = [1];
console.log(a1, b1);    // 1,  undefined 

let [a2 = 1, b2] = [];
console.log(a2, b2);    // 1,  undefined 

支持剩余参数,通过...参数来设定,它会用于收集剩余的元素来创建一个新的数组。文章来源地址https://www.toymoban.com/news/detail-668817.html

// 数组
let [a, ...b] = [1, 2, 3];
console.log(typeof(a), typeof(b));  // "number",  "object" 
console.log(a, b);                  // 1,  [2, 3] 

// 对象
let {age, ...params} = {
    name: "ES", 
    age: 2023, 
    value: 1,
}
// 参数age被赋值,其余的都给了params
// 2023,  {"name": "ES", "value": 1} 
console.log(age, params);   

// 函数参数,比如求和
function AddNum(...numbers: any) {
    let totalValue = 0;
    for (let num of numbers) {
        totalValue += parseInt(num);
    }
    return totalValue;
}
console.log(AddNum(1, 2, 3));       // 6
console.log(AddNum(1, "2", "3"));   // 6

到了这里,关于ECMAScript6 简介及拓展的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ECMAScript6_3】正则、数值、函数、数组、对象、运算符

    1、如果RegExp构造函数第一个参数是一个正则对象,那么可以使用第二个参数指定修饰符。而且,返回的正则表达式会忽略原有的正则表达式的修饰符,只使用新指定的修饰符。 ES5不允许第二个参数使用修饰符, 2、ES6将字符串中可以使用正则表达式的4个方法全部调用RegExp的

    2024年02月15日
    浏览(38)
  • TypeScript教程(一)简介与安装

            TypeScript 是 JavaScript 的一个超集,扩展了JavaScript的语法,因此现有的JavaScript可与TypeScript一起工作无需修改,支持 ECMAScript 6 标准(ES6 教程)。 1.类型批注和编译时类型检查 2.类型推断 3.类型擦除 4.接口 5.枚举 6.泛型编程 7.名字空间 8.元组 9.Await 10.Mixin 从ECMA2015反

    2024年02月13日
    浏览(39)
  • 【ECMAScript6_6】async 函数、Class、Module、异步遍历器、ArrayBuffer、Decorator装饰器

    1、async 函数 async 函数是什么?一句话,它就是 Generator 函数的语法糖。async函数就是将 Generator 函数的星号(*)替换成async,将yield替换成await,仅此而已。 async函数自带执行器,只要调用了asyncReadFile函数,它就会自动执行,输出最后结果。不像 Generator 函数,需要调用next方法

    2024年02月16日
    浏览(42)
  • ECMAScript 6语法简介

    在Vue开发中,使用块作用域构造 let 和 const 可以更好地管理变量的作用域,避免出现意外的变量污染。 let 可以在块级作用域中声明一个变量,并且该变量仅在该作用域内有效。 解析:在上述代码中,我们在块级作用域内部使用 let 声明了变量 value 。在 if 代码块内部,

    2024年02月15日
    浏览(43)
  • ECMAScript (ES)简介

    ECMAScript (ES) 是一种标准化的脚本语言规范,它是 JavaScript 语言的基础 基本语法结构: 变量声明 : 使用 var (ES5 及以前版本)、 let (ES6 起引入)或 const (ES6 起引入)声明变量。 数据类型 : 基本数据类型: number 、 string 、 boolean 、 null 、 undefined 、 symbol (ES6 新增

    2024年04月11日
    浏览(37)
  • 【TypeScript】TypeScript中的泛型

    定义一个函数或类时,有些情况下无法确定其中要使用的具体类型(返回值、参数、属性的类型不能确定),此时泛型便能够发挥作用。 举个例子: 上例中,test函数有一个参数类型不确定,但是能确定的时其返回值的类型和参数的类型是相同的,由于类型不确定所以参数和

    2024年02月09日
    浏览(45)
  • 《前端面试题》- TypeScript - TypeScript的优/缺点

    简述TypeScript的优/缺点 优点 增强了代码的可读性和可维护性 包容性,js可以直接改成ts,ts编译报错也可以生成js文件,兼容第三方库,即使不是ts编写的 社区活跃,完全支持es6 缺点 增加学习成本 增加开发成本,因为增加了类型定义 需要编译,类型检查会增加编译时长,语

    2024年04月23日
    浏览(40)
  • 16.【TypeScript 教程】TypeScript 泛型(Generic)

    本节开始介绍 TypeScript 一些进阶知识点,第一个要介绍的泛型是 TypeScript 中非常重要的一个概念,它是一种用以增强函数、类和接口能力的非常可靠的手段。 使用泛型,我们可以轻松地将那些输入重复的代码,构建为可复用的组件,这给予了开发者创造灵活、可重用代码的能

    2024年01月18日
    浏览(43)
  • 【TypeScript】TypeScript的介绍、安装和配置

    TypeScript是JavaScript的超集。 它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。 TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。 TS完全兼容JS,换言之,任何的JS代码都可以直接当成JS使用。 相较于JS而言,TS拥有了静态类型,更加严格的语法,更

    2024年02月09日
    浏览(36)
  • 【TypeScript】项目中对于TypeScript的打包处理

    通常情况下,实际开发中我们都需要使用构建工具对代码进行打包,TS同样也可以结合构建工具一起使用,下边以webpack为例介绍一下如何结合构建工具使用TS。 步骤: 初始化项目 进入项目根目录,执行命令 npm init -y 主要作用:创建package.json文件 下载构建工具 npm i -D webpack

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包