前端基础:回顾es6相关知识

Author note(题记):

ECMAscript is international standard of javascript。

ECMA 是 js的国际标准版语言。

let and const 

为什么之前用var现在需要用let,const呢?

其实就是因为规范作用域的问题。var的作用域无块级

for (var i = 0; i < 10; i++) {console.log('i')}console.log(i)// 10for (let j = 0; j < 10; j++) {console.log('j')}console.log(j) // 报错

 我们看这个代码会发现代码块里边使用var外边也能访问,而let就不能,所以let更加严谨,const也一样,只不过const是声明常量的词,用作不改变的变量内容。

顺便提一下var的变量提升也是鸡肋的存在,不太严谨,所以let与const的暂时性死区也是解决这个问题的。

解构赋值

功能就是为了方便取值,解构解构先了解之前的结构才能解开,结构需一样,但取值可少取

比如let 【x,y] = [1,2,3]

let arr = [1,2,3]let a = arr[0]let b = arr[1]let c = arr[2]console.log('数据是', a, b, c)

vs

let [a,b,c] = [1,2,3]console.log('数据是', a, b, c)

你会发现es6的写法真的很nice

事实上,只要某种数据结构具有 Iterator 接口,都可以采用数组形式的解构赋值。

使用场景上对象的解构赋值非常常用,比如使用Vuex,路由,第三方模块等等。

字符串扩展 

unicode表示法

ES6 加强了对 Unicode 的支持,允许采用\uxxxx形式表示一个字符,其中xxxx表示字符的 Unicode 码点。

let b = '\u0061'console.log('数据是', b) // a

遍历字符串 

for (let a of 'hep') {console.log('数据是', a)}

 模板字符串

提示:这个场景用的最多

let name = 'john'let age = '18'let sentence = 'my name is' + name + ',' + 'my age is' + ageconsole.log(sentence)let esSentence = `my name is ${name},my age is ${age}`console.log(esSentence)

字符串的新增方法

String.fromCodePoint()

String.fromCharCode(0x20BB7)

正则

RegExp 构造函数

第一种情况是,参数是字符串,这时第二个参数表示正则表达式的修饰符(flag)

var regex = new RegExp('xyz', 'i');
// 等价于
var regex = /xyz/i;

第二种情况是,参数是一个正则表示式,这时会返回一个原有正则表达式的拷贝。

var regex = new RegExp(/xyz/i);
// 等价于
var regex = /xyz/i;

数值的扩展

Number.parseInt(), Number.parseFloat()

// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45

Number.isInteger()

Number.isInteger()用来判断一个数值是否为整数。

Number.isInteger(25) // true
Number.isInteger(25.1) // false

Math对象的扩展

Math.trunc()

Math.trunc方法用于去除一个数的小数部分,返回整数部分。

Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0

Math.sign()

Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

它会返回五种值。

  • 参数为正数,返回+1
  • 参数为负数,返回-1
  • 参数为 0,返回0
  • 参数为-0,返回-0;
  • 其他值,返回NaN
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN

 函数的扩展

function Point(x, y) {this.x = x || 0;this.y = y || 0;
}const p = new Point();
p // { x: 0, y: 0 }

vs es6

function Point(x = 0, y = 0) {this.x = x;this.y = y;
}const p = new Point();
p // { x: 0, y: 0 }

当然下边这个更好一些

我们再看下边这个结合解构赋值的例子

function foo({x, y = 5}) {console.log(x, y);}foo({}) // undefined 5foo({x: 1}) // 1 5foo({x: 1, y: 2}) // 1 2

也就是当一个参数为复杂数据类型的时候使用更加的方便了

数组的扩展

合并数组es6之前用concat(),以后就let arr2 = 【...arr1】

Array.from()

let arrayLike = {'0': 'a','1': 'b','2': 'c',length: 3
};// ES5 的写法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']// ES6 的写法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']

延申:[].slice.call()等同于Array.prototype.slice.call() 

实例方法:entries(),keys() 和 values() 

ES6 提供三个新的方法——entries()keys()values()——用于遍历数组。它们都返回一个遍历器对象(详见《Iterator》一章),可以用for...of循环进行遍历,唯一的区别是keys()是对键名的遍历、values()是对键值的遍历,entries()是对键值对的遍历。

for (let index of ['a', 'b'].keys()) {console.log(index);
}
// 0
// 1for (let elem of ['a', 'b'].values()) {console.log(elem);
}
// 'a'
// 'b'for (let [index, elem] of ['a', 'b'].entries()) {console.log(index, elem);
}
// 0 "a"
// 1 "b"

我们常常用Object.keys(obj).length来判断对象是否为null,arr.keys().length也可以啊,其实想一想直接arr.length就可以啊。

实例方法:includes()

Array.prototype.includes方法返回一个布尔值,表示某个数组是否包含给定的值,与字符串的includes方法类似。ES2016 引入了该方法。

之前经常使用这个去判断数据当中是否有某一个值,进行判断。

实例方法:flat(),flatMap()

数组的成员有时还是数组,Array.prototype.flat()用于将嵌套的数组“拉平”,变成一维的数组。该方法返回一个新数组,对原数据没有影响。

对象的扩展

属性的简洁表示法

提示:这个你会见的最多  比如import {name} from ’@/name.js‘

const foo = 'bar';
const baz = {foo};
baz // {foo: "bar"}// 等同于
const baz = {foo: foo};

Symbol

这个用的场景就是有些对象属性不想对外开发,想私有化就用它就对了

let obj = {[Symbol('name')]: '一斤代码',age: 18,title: 'Engineer'
}Object.keys(obj)   // ['age', 'title']for (let p in obj) {console.log(p)   // 分别会输出:'age' 和 'title'
}Object.getOwnPropertyNames(obj)   // ['age', 'title']

Set与Map

Set理解为数学的集合就行,Map就是为了解决键的多样化的设置,另外就是按顺序迭代,占用空间较小。

Proxy

可以理解的是这个比较重要,是对代码的再次编程。

var proxy = new Proxy({}, {get: function(target, propKey) {return 35;}
});proxy.time // 35
proxy.name // 35
proxy.title // 35

其实在Vue中我们知道数据的双向绑定Vue2使用的definePropty(),Vue3使用的就是Proxy

Promise 对象

这个非常关键,之前写过一篇。

promise的使用

async函数 

这个也用的特别多,其实就是就是返回一个Promise对象

function timeout(ms) {return new Promise((resolve) => {setTimeout(resolve, ms);});
}async function asyncPrint(value, ms) {await timeout(ms);console.log(value);
}asyncPrint('hello world', 50);

async function f() {return 'hello world';
}f().then(v => console.log(v))

模块化

目前很多项目都是使用的import,export,比较常用

结语:

工作之余顺便看看之前的知识是一件开心的事,每一次看都会有新的体会。

Module 的语法 - ECMAScript 6入门 (ruanyifeng.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/630381.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第二百七十二回

文章目录 1. 概念介绍2. 方法与类型2.1 使用方法2.2 常见类型 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何加载本地图片"相关的内容&#xff0c;本章回中将介绍如何获取文件类型.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回…

常用的消息队列和中间件都有哪些

常用的消息队列和中间件有以下几种&#xff1a; RabbitMQ&#xff1a;RabbitMQ是一个开源的消息队列中间件&#xff0c;使用Erlang语言编写。它具有可靠性、灵活性和易用性的特点&#xff0c;支持多种消息协议。 Kafka&#xff1a;Kafka是一个高吞吐量的分布式发布订阅消息系统…

23.实战演练--个人主页

<?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"><applicationandroid:allowBackup"true"an…

【项目实战】Postgresql数据库中出现锁表如何解决

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项目…

Unity之触发器

目录 &#x1f4d5;一、触发器概念 &#x1f4d5;二、碰撞与触发的区别 &#x1f4d5;三、触发器小实例 一、触发器概念 第一次玩侠盗猎车手是在小学&#xff0c;从那以后就开启了我的五星好市民之路。 下面是小编在小破站截的图&#xff0c;这是罪恶都市最开始的地方&a…

MCU和MPU有什么区别

大家好&#xff0c;今天给大家介绍MCU和MPU有什么区别&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 MCU&#xff08;Microcontroller Unit&#xff09;和MPU&#xff08;Micro…

Rust类型之数组和动态数组

数组动态数组类型arrayVec&#xff08;Vector&#xff09;&#xff0c;向量作用存储同一类型的多个值存储同一类型的多个值表示数组表示成[T; N]&#xff0c;由中括号括起来&#xff0c;中间用分号隔开&#xff0c;分号前面表示类型&#xff0c;分号后面表示数组长度。Vec<类…

蓝桥杯备赛 day 2 —— 二分算法(C/C++,零基础,配图)

目录 &#x1f308;前言&#xff1a; &#x1f4c1; 二分的概念 &#x1f4c1; 整数二分 &#x1f4c1; 二分的模板 &#x1f4c1; 习题 &#x1f4c1; 总结 &#x1f308;前言&#xff1a; 这篇文章主要是准备蓝桥杯竞赛同学所写&#xff0c;为你更好准备蓝桥杯比赛涉及…

从0到1:实验室设备借用小程序开发笔记

概论 实验室设备借用小程序&#xff0c;适合各大高校&#xff0c;科技园区&#xff0c;大型企业集团的实验室设备借用流程, 通过数字化的手段进一步提升相关单位设备保障水平&#xff0c;规范实验室和设备管理&#xff0c;用户通过手机小程序扫描设备的二维码&#xff0c;可以…

深入解析:如何使用Java、SpringBoot、Vue.js和MySQL构建课表管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

VS代码生成工具ReSharper v2023.3正式发布——支持C# 12

实质上&#xff0c;ReSharper特征可用于C#&#xff0c;VB.net&#xff0c;XML&#xff0c;Asp.net&#xff0c;XAML&#xff0c;和构建脚本。 使用ReSharper&#xff0c;你可以进行深度代码分析&#xff0c;智能代码协助&#xff0c;实时错误代码高亮显示&#xff0c;解决方案范…

STM32 定时器输入捕获3——捕获超长高电平

第一章&#xff1a;https://blog.csdn.net/m0_73671341/article/details/134773615?spm1001.2014.3001.5501 第二章&#xff1a;https://blog.csdn.net/m0_73671341/article/details/134938332?spm1001.2014.3001.5501 从第一章的定时器捕获我们可以知道&#xff0c;即使把定…

杂记:使用 mac 和 windows 以及编辑器的总结

Chrome 扩展 Grammarly 语法检查 DM Integration Module idm 下载扩展 JSON Formatter json 格式化查看 uBlock Origin Ad block 油猴 任意网站都可以使用的脚本管理工具 Mac 快捷键整理 截图到剪贴板 shift command control 4 (不按 shift 存储为文件) 切换输入法…

JavaScript基础(27)_内联样式的获取和修改、获取元素当前显示的样式

内联样式的获取和修改 获取元素的内联样式&#xff1a; 语法&#xff1a;元素.style.样式名 注意&#xff1a;通过style属性设置和读取的都是内联样式&#xff0c;无法读取样式表中的样式。 修改元素的内联样式&#xff1a; 语法&#xff1a;元素.style.样式名 样式值比如…

子文件夹中一个.py文件导入父文件夹中某个.py文件

虽然各种Python语言编程书籍中一再强调&#xff0c;自从Python 3.3版本后&#xff0c;构建Python的Package结构&#xff0c;不用在每个文件夹下添加__init__.py文件。上面这句话&#xff0c;仅仅针对的是从主文件夹中的主要.py来导入各个子文件夹的模块结构来说的。自己亲自试验…

并发编程之深入理解AQS

目录 什么是AQS&#xff1f; AQS的特性 AQS总结 什么是AQS&#xff1f; java.util.concurrent包中的大多数同步器实现都是围绕着共同的基础行为&#xff0c;比如等待队列、条件队列、独占获取、共享获取等&#xff0c;而这些行为的抽象就是基于AbstractQueuedSynchronizer&a…

WordPress后台仪表盘自定义添加删除概览项目插件Glance That

成功搭建WordPress站点&#xff0c;登录后台后可以在“仪表盘 – 概览”中看到包括多少篇文章、多少个页面、多少条评论和当前WordPress版本号及所使用的主题。具体如下图所示&#xff1a; 但是如果我们的WordPress站点还有自定义文章类型&#xff0c;也想在概览中显示出来应该…

【经验分享】美赛报名以及注册方法-以2024年美赛为例

1 进入美赛官网 首先点击COMAP的官网链接&#xff1a; https://www.comap.com/然后选择Contests目录下的MCM/ICM 选择 Learn More and Register 然后选择 register for contest 接下来开始注册环节&#xff0c;注册分为两个步骤&#xff1a;顾问&#xff08;指导教师&#xf…

Jsqlparser简单学习

文章目录 学习链接模块访问者模式parser模块statement模块Expression模块deparser模块 测试TestDropTestSelectTestSelectVisitor 学习链接 java设计模式&#xff1a;访问者模式 github使用示例参考 测试 JSqlParser使用示例 JSqlParse&#xff08;一&#xff09;基本增删改…

力扣(leetcode)第819题最常见的单词(Python)

819.最常见的单词 题目链接&#xff1a;819.最常见的单词 给你一个字符串 paragraph 和一个表示禁用词的字符串数组 banned &#xff0c;返回出现频率最高的非禁用词。题目数据 保证 至少存在一个非禁用词&#xff0c;且答案 唯一 。 paragraph 中的单词 不区分大小写 &…