路漫漫其修远兮:js的成长经历(四)—— ES6基础语法

2024-03-18 14:50

本文主要是介绍路漫漫其修远兮:js的成长经历(四)—— ES6基础语法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • ES6的简介
  • ES6的基础语法
    • let的特性
    • const的特性
    • 解构赋值
    • 模板字符串
    • 箭头函数
    • 生成器
    • ES6中类的定义
    • ES6中set方法
    • ES6中的map

ES6的简介

ECMAScript 6 简称 ES6,是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了。它的目标是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。
ECMAScript 和 JavaScript 的关系:前者是后者的语法规格,后者是前者的一种实现
Babel:将ES6代码转为ES5代码:https://babeljs.io/

ES6的基础语法

let的特性

用来声明标变量。它的用法类似于var,但声明的变量只在let命令所在的代码块内有效:

  1. 存在块级作用域{}
  2. 不存在声明提升
  3. 不允许重复声明{包括普通函数和函数参数}
var a=10;
if(a>5){
var c=200;
let b=100;				
}
console.log(c);//200
console.log(b);//报错 not defind

const的特性

用来声明变量,用法和var类似
(注意:不允许重复赋值)

//const 不允许重复赋值 其他参照let
const q=5;
q=20;//报错
console.log(q);

解构赋值

简化数组和对象中信息的提取。
ES6前,我们一个一个获取对象信息;
ES6后,解构能让我们从对象或者数组里取出数据存为变量

<body><script type="text/javascript">//解构赋值let [a,b,c]=[1,2,3];console.log(a,b,c);//1 2 3let [d=10,e]=[2];//a的默认赋值是10,然后赋值为2,b是没有赋值console.log(d,e); //2 undefinedlet f;let[g=2]=[f];//a不会变为没有被赋值console.log(g);//2//对象赋值			let{h,i}={h:"111",i:"222"};console.log(h,i);//111 222let {j,k}={j:111};console.log(j,k);//111 undefinedlet {l,m=5}={l:1};console.log(l,m);//1 5		</script></body>

模板字符串

解决了 ES5 在字符串功能上的痛点。
第一个用途:字符串拼接。将表达式嵌入字符串中进行拼接,用 `` 和 ${}来界定。

// es5
var name1 = "bai";
console.log('hello' + name1);// es6
const name2 = "ming";
console.log(`hello${name2}`);

第二个用途:在ES5时我们通过反斜杠来做多行字符串拼接。ES6反引号 `` 直接搞定。

// es5var msg = "Hi \man!";// es6
const template = `<div><span>hello world</span>
</div>`;

另外:includes repeat

// includes:判断是否包含然后直接返回布尔值
let str = 'hahah';
console.log(str.includes('y')); // false// repeat: 获取字符串重复n次
let s = 'he';
console.log(s.repeat(3)); // 'hehehe'

箭头函数

函数的快捷写法。不需要 function 关键字来创建函数,省略 return 关键字
箭头函数小细节:当你的函数有且仅有一个参数的时候,是可以省略掉括号的;当你函数中有且仅有一个表达式的时候可以省略{}

//ES5function foo(){return 1;}console.log(foo());//1//ES6箭头函数let fo = ()=>1;console.log(fo())//1

继承当前上下文的 this 关键字:javaScript语言的this对象一直是一个令人头痛的问题,这是因为setTimeout中的this指向的是全局对象。

//this作用域//ES5 作用域在a内var name="Nick";var a={name:"Amy",say:function(){console.log(this.name+"你好呀")}};a.say();//Amy你好呀//ES6//指向定义是所在的作用域,而不是执行时所在的作用域var name="Nick";var a={name:"Amy",say:()=>{console.log(this.name+"你好呀")}};a.say();//Nick你好呀//相当于下面的代码,作用域是window;var a={};a.name="Amy";a.say=()=>{console.log(this.name+"你好呀")};a.say();//Nick你好呀

生成器

生成器( generator)是能返回一个迭代器的函数。

生成器函数也是一种函数,最直观的表现就是比普通的function多了个星号*,在其函数体内可以使用yield关键字,有意思的是函数会在每个yield后暂停。

这里生活中有一个比较形象的例子。咱们到银行办理业务时候都得向大厅的机器取一张排队号。你拿到你的排队号,机器并不会自动为你再出下一张票。也就是说取票机“暂停”住了,直到下一个人再次唤起才会继续吐票。

迭代器:当你调用一个generator时,它将返回一个迭代器对象。这个迭代器对象拥有一个叫做next的方法来帮助你重启generator函数并得到下一个值。next方法不仅返回值,它返回的对象具有两个属性:done和value。value是你获得的值,done用来表明你的generator是否已经停止提供值。继续用刚刚取票的例子,每张排队号就是这里的value,打印票的纸是否用完就这是这里的done。

// 生成器function *createIterator() {yield 1;yield 2;yield 3;}// 生成器能像正规函数那样被调用,但会返回一个迭代器let iterator = createIterator();console.log(iterator.next().value); // 1console.log(iterator.next().value); // 2console.log(iterator.next().value); // 3function *foo(x){yield x+1;yield x+2;return x+3;}var f=foo(1);//done代表执行过,第三个值为true表示该函数已经执行完毕console.log(f.next(),f.next(),f.next());//{value: 2, done: false}done: falsevalue: 2__proto__: Object {value: 3, done: false} {value: 4, done: true}

用生成器写一个斐波那契数列

//生成器写斐波那契数列function *feibo(x){			var a=0;var b=1;for(var i=0;i<x;i++){yield a;var t=a+b;a=b;b=t;}}var f=feibo(10);for(let i of f){console.log(i);}

ES6中类的定义

ES6引入了Class(类)这个概念。

		<script type="text/javascript">class Animal {//构造函数constructor() {this.type = 'animal';}//类中的方法says(say) {console.log(this.type + ' says ' + say);}}let animal = new Animal();animal.says('hello'); //animal says helloclass Cat extends Animal {constructor() {super();//实现父类对象this.type = 'cat';}}let cat = new Cat();cat.says('hello'); //cat says hello</script>

上面代码首先用class定义了一个“类”,可以看到里面有一个constructor方法,这就是构造方法,而this关键字则代表实例对象。简单地说,constructor内定义的方法和属性是实例对象自己的,而constructor外定义的方法和属性则是所有实力对象可以共享的。

Class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多。上面定义了一个Cat类,该类通过extends关键字,继承了Animal类的所有属性和方法。

super关键字,它指代父类的实例(即父类的this对象)。子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

ES6的继承机制,实质是先创造父类的实例对象this(所以必须先调用super方法),然后再用子类的构造函数修改this。

ES6中set方法

在这里插入图片描述

<script type="text/javascript">var a=new Set([1,2,3,4,5,5]);console.log(a);var b=[...a]//扩展运算符...   返回的是数组console.log(b);// for of 用来遍历集合或者数组for(let i of a){console.log(i);}for(let i of b){console.log(i);}a.add(9);//添加console.log(a);console.log(a.has(9));//判断是否含有该元素a.delete(9);//删除某元素console.log(a.has(9));a.clear();//清空集合console.log(a);//使用回掉函数遍历每个成员a.forEach((value,key)=>console.log(value*2,key*2));		</script>

ES6中的map

在这里插入图片描述

<script type="text/javascript">//map的定义以及使用var a=new Map([["name","Nick"],["age","18"]]);console.log(a);//Map(2) {"name" => "Nick", "age" => "18"}a.set("Amy",19);console.log(a);Map(3) {"name" => "Nick", "age" => "18", "Amy" => 19}//具体的使用方法和set相似</script>

总结:以上就是ES6的基础语法,可以说这20%的语法,在ES6的日常使用中占了80%

参考文章链接:http://bxm0927.github.io/2017/06/24/es6_study/

这篇关于路漫漫其修远兮:js的成长经历(四)—— ES6基础语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/822696

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

HTML中meta标签的常见使用案例(示例详解)

《HTML中meta标签的常见使用案例(示例详解)》HTMLmeta标签用于提供文档元数据,涵盖字符编码、SEO优化、社交媒体集成、移动设备适配、浏览器控制及安全隐私设置,优化页面显示与搜索引擎索引... 目录html中meta标签的常见使用案例一、基础功能二、搜索引擎优化(seo)三、社交媒体集成四、移动

HTML input 标签示例详解

《HTMLinput标签示例详解》input标签主要用于接收用户的输入,随type属性值的不同,变换其具体功能,本文通过实例图文并茂的形式给大家介绍HTMLinput标签,感兴趣的朋友一... 目录通用属性输入框单行文本输入框 text密码输入框 password数字输入框 number电子邮件输入编程框

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

HTML5 中的<button>标签用法和特征

《HTML5中的<button>标签用法和特征》在HTML5中,button标签用于定义一个可点击的按钮,它是创建交互式网页的重要元素之一,本文将深入解析HTML5中的button标签,详细介绍其属... 目录引言<button> 标签的基本用法<button> 标签的属性typevaluedisabled

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.