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

2024-01-21

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)// 10
    for (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' + age
    console.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 5
    foo({x: 1}) // 1 5
    foo({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
// 1

for (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)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 每天10个前端小知识 <Day 8>

    1 Javascript中如何实现函数缓存 函数缓存有哪些应用场景 函数缓存 就是将函数运算过的结果进行缓存 本质上就是用空间 缓存存储 换时间 计算过程 常用于缓存数据计算结果和缓存对象 缓存只是一个临时的数据存储 它保存数据 以便将来对
  • 2种方法,教你使用Python实现接口自动化中的参数关联

    通常在接口自动化中 经常会参数关联的问题 那么什么是参数关联 参数关联就是上一个接口的返回值会被下一个接口当做参数运用 其中Python中可以实现参数关联的方法有很多种 今天小编给大家介绍下 如何通过Python来实现接口自动化中的参数关联

随机推荐

  • WEB前端常见受攻击方式及解决办法总结

    一个网址建立后 如果不注意安全问题 就很容易被人攻击 下面讨论一下集中漏洞情况和放置攻击的方法 一 SQL注入 所谓的SQL注入 就是通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串 最终达到欺骗服务器执行恶意的SQL命
  • RF自动化环境安装+自动化实例解析

    RF定义 通用型的 自动测试框架 绝大部分的软件的的自动化系统都可以采用它 特点 测试数据文件 Test Data 对应一个个的测试用例 测试数据文件里面使用的功能小模块叫关键字 由测试库 Test Library Robot Framew
  • infocardapi.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个infocar
  • 欧盟反垄断主管即将会见库克,iPhone NFC功能要开放了?

    1月5日路透社报道 欧盟反垄断主管玛格丽特 维斯塔格 Margrethe Vestager 即将在下周举办会议 会见苹果 博通 英伟达等多个科技公司CEO 苹果首席执行官蒂姆 库克 Tim Cook 就在其中 欧盟反垄断想来大家应该已经不陌
  • ir32_32.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个ir32 32
  • 每天10个前端小知识 <Day 6>

    前端面试基础知识题 1 使用js实现二分查找 二分查找 也称为折半查找 是指在有序的数组里找出指定的值 返回该值在数组中的索引 查找步骤如下 从有序数组的最中间元素开始查找 如果该元素正好是指定查找的值 则查找过程结束 否则进行下一步 如果
  • 几个Python小案例,爱上Python编程!

    Python是一种面向对象的解释型编程语言 源代码与解释器CPython遵守GPL协议 Python语法简洁清晰 语法简洁清晰 那么我们用少量的Python代码能做哪些有趣的东西 温馨提示 文末必看 一 画爱心表白 1 图形都是由一系列的点
  • 使用 Neo4j 和 LangChain 集成非结构化知识图增强 QA

    目前基于大模型的信息检索有两种方法 一种是基于微调的方法 一种是基于 RAG 的方法 信息检索和知识提取是一个不断发展的领域 随着大型语言模型 LLM 和知识图的出现 这一领域发生了显着的变化 特别是在多跳问答的背景下 接下来我们继续深入
  • 用户数据中的幸存者偏差

    幸存者偏差 Survivorship bias 是一种常见的逻辑谬误 意思是没有考虑到筛选的过程 忽略了被筛选掉的关键信息 只看到经过筛选后而产生的结果 先讲个故事 二战时 无奈德国空防强大 盟军战机损毁严重 于是军方便找来科学家统计飞机受
  • 小白刷题之图形输出

    拓展 string string int num char ch num表示打印字符个数 ch表示打印内容 include
  • Python自动化操作:简单、有趣、高效!解放你的工作流程!

    今天跟大家分享一套自动化操作流程解决方案 基于 Python语言 涉及 pyautogui pyperclip pythoncom win32com 依赖包 安装命令为 pip install pyautogui pip install p
  • 怎么注册微商城?开启微商城之旅

    在这个数字化时代 微商城的出现为商家提供了一个全新的机会 商家企业可以通过微商城来展示和销售自己的产品 而对于一些商家而言 不知道怎么注册微商城 下面给大家做一个简单的分享 第一步 选择合适的微商城搭建工具 在注册微商城之前 首先需要选择一
  • 2024年网络安全十10大发展趋势发布

    2023年网络安全十10大发展趋势发布 近日 中国计算机学会 CCF 计算机安全专委会中 来自国家网络安全主管部门 高校 科研院所 大型央企 民营企业的委员投票评选出2023年网络安全十大发展趋势 福利 趋势一 数据安全治理成为数字经济的基
  • Windows7系统iprop.dll文件丢失问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个iprop d
  • 白帽子如何快速挖到人生的第一个漏洞 | 购物站点挖掘商城漏洞

    本文针对人群 很多朋友们接触安全都是通过书籍 网上流传的PDF 亦或是通过论坛里的文章 但可能经过了这样一段时间的学习 了解了一些常见漏洞的原理之后 对于漏洞挖掘还不是很清楚 甚至不明白如何下手 可能你通过 sql labs 初步掌握了sq
  • 图解python | 字符串及操作

    1 Python元组 Python的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 tup1 ByteDance ShowMeAI 1997 202
  • 每天10个前端小知识 <Day 5>

    前端面试基础知识题 1 typeof 与 instanceof 有什么区别 typeof与instanceof都是判断数据类型的方法 区别如下 typeof会返回一个变量的基本类型 instanceof返回的是一个布尔值 instanceo
  • 2024年华数杯国际赛B题:光伏发电功率 思路模型代码解析

    2024年华数杯国际赛B题 光伏发电功率 Photovoltaic Power 一 问题描述 中国的电力构成包括传统能源发电 如煤 油和天然气 可再生能源发电 如水电 风能 太阳能和核能 以及其他形式的电力 这些发电模式在满足中国对电力的巨
  • iprtrmgr.dll文件丢失导致程序无法运行问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库 这时你可以下载这个iprtrmg
  • 前端基础:回顾es6相关知识

    Author note 题记 ECMAscript is international standard of javascript ECMA 是 js的国际标准版语言 let and const 为什么之前用var现在需要用let cons