我的编程空间,编程开发者的网络收藏夹
学习永远不晚

JavaScript的特性有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

JavaScript的特性有哪些

这篇文章主要讲解了“JavaScript的特性有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript的特性有哪些”吧!

ES2015

二进制和八进制

在 JavaScript  中,二进制操作并不常见,但有时也会遇到,否则无法切实解决你的问题。你可能正在为低功耗设备编写高性能代码,将位压缩到本地存储中,在浏览器中进行像素 RGB  操作,或者必须处理紧密打包的二进制数据格式。

这可能意味着有很多工作需要对二进制数字进行处理,我一直觉得用十进制也能做这些事。好吧,ES6 为此添加了一个二进制数字格式:0b

const binaryZero = 0b0; const binaryOne  = 0b1; const binary255  = 0b11111111; const binaryLong = 0b111101011101101;

这使得处理二进制标志非常容易:

// Pizza toppings const olives    = 0b0001; const ham       = 0b0010; const pineapple = 0b0100; const artechoke = 0b1000;  const pizza_ham_pineapple = pineapple | ham; const pizza_four_seasons  = olives | ham | artechoke;

对于八进制数也是如此。在 JS 世界中,这些领域有点小众,但在网络和某些文件格式中却很常见。现在你可以用语法 0o 处理八进制。

Number.isNaN()

不要与 window.isNaN() 混淆,这是一种有着更直观行为的新方法。

你会发现,经典的 isNaN 有一些有趣的怪癖:

isNaN(NaN)              === true isNaN(null)             === false isNaN(undefined)        === true isNaN({})               === true isNaN('0/0')            === true isNaN('hello')          === true

是什么导致了这种结果?首先,这些参数实际上都不是 NaN。与以往一样,问题出在大家“最喜欢的” JavaScript 特性上:类型强制。通过 Number  函数将 window.isNaN 的参数强制为数字。

好吧,新的 Number.isNaN() 静态方法解决了所有问题。它会一劳永逸地返回你提供的自变量与 NaN 的相等性。这是绝对明确的:

Number.isNaN(NaN)       === true Number.isNaN(null)      === false Number.isNaN(undefined) === false Number.isNaN({})        === false Number.isNaN('0/0')     === false Number.isNaN('hello')   === false

函数签名: Number.isNaN : (value: any) => boolean

ES2016

指数(幂)运算符

很高兴有一个字面量的语法来表示幂:

2**2 === 4 3**2 === 9 3**3 === 27

(这很奇怪,因为我确信 JavaScript 已经有了这个 —— 我可能一直在考虑 Python)

Array.prototype.includes()

这个功能值得关注,如果你过去几年一直在写 array.indexOf(x)!== -1 这样的代码,那么现在可以用新的 includes 方法:

[1, 2, 3].includes(2)    === true [1, 2, 3].includes(true) === false

includes 用 Same Value Zero Algorithm(几乎与严格等式 === 相同)进行检查,但它可以处理 NaN  值。像相等检查一样,它将通过引用而不是内容来比较对象:

const object1 = {}; const object2 = {};  const array = [object1, 78, NaN];  array.includes(object1) === true array.includes(object2) === false array.includes(NaN)     === true

includes 可以通过第二个参数 fromIndex 让你提供一个偏移量:

// positions   0  1  2  3  4 const array = [1, 1, 1, 2, 2];  array.includes(1, 2) === true array.includes(1, 3) === false

太顺手了。

函数签名: Array.prototype.includes : (match: any, offset?: Int) => boolean

ES2017

共享数组缓冲区和原子操作

这是一对很棒的功能,如果你要与 web workers  一起做大量的工作,那么这些特性将被证明是无价的。它们使你可以直接在进程之间共享内存,并通过设置锁来避免资源争抢的情况。

它们都是相当复杂的 API 功能,因此这里不回对其进行概述,但是可以通过 Sitepen  的文章了解更多信息。目前有一些浏览器还不支持,但有望在未来几年内得到改善。

ES2018

强大的正则表达式

ES2018引入了一整套正则表达式特性:

Lookbehind 匹配项(前向匹配)

在支持它的运行时中,你现在可以用正则表达式来进行前向匹配。例如要查找所有以美元开头的数字:

const regex = /(?<=\$)\d+/; const text  = 'This cost $400'; text.match(regex) === ['400']

关键是新的 lookbehind 搜索组与lookahead 搜索组是一对邪恶的双胞胎:

Look ahead:  (?=abc) Look behind: (?<=abc)  Look ahead negative:  (?!abc) Look behind negative: (?<!abc)

不幸的是,目前还没有什么方法可以为较旧的浏览器支持新的后向语法,所以你目前只能在 Node 上用它。

你可以命名捕获组

正则表达式真正强大的功能是能够挑选出子匹配项,并用它们进行一些简单的解析。但是直到不久前,我们只能通过数字来引用子匹配项,例如:

const getNameParts  = /(\w+)\s+(\w+)/g; const name          = "Weyland Smithers"; const subMatches    = getNameParts.exec(name);  subMatches[1]     === 'Weyland' subMatches[2]     === 'Smithers'

现在有了一种语法,可以通过在要命名的每个组的括号的开头放置 ? 来分配这些子匹配项(或捕获组)的名称:

const getNameParts  = /(?<first>\w+)\s(?<last>\w+)/g; const name          = "Weyland Smithers"; const subMatches    = getNameParts.exec(name);  const {first, last} = subMatches.groups first             === 'Weyland' last              === 'Smithers'

不幸的是,目前暂时只有 Chrome 和 Node 支持。

现在可以用点匹配新行

你只需要提供 /s 标志,例如 /someRegex./s、`/anotherRegex./sg。

ES2019

Array.prototype.flat() & flatMap()

我很高兴在 MDN 上看到这些内容。

简单地说,flat() 将多维数组按指定的最大 depth 展平:

const multiDimensional = [     [1, 2, 3],     [4, 5, 6],     [7,[8,9]] ];  multiDimensional.flat(2) === [1, 2, 3, 4, 5, 6, 7, 8, 9]

flatMap 本质上是一个 map,也是深度为 1 的 flat。当从映射函数返回一个数组,但你不希望结果为嵌套数据结构时,用它很方便:

const texts = ["Hello,", "today I", "will", "use FlatMap"];  // with a plain map const mapped = texts.map(text => text.split(' ')); mapped === ['Hello', ['today', 'I'], 'will', ['use', 'FlatMap']];  // with flatmap const flatMapped = texts.flatMap(text => text.split(' ')); flatMapped === ['Hello', 'today', 'I', 'will', 'use', 'FlatMap'];

未绑定的捕获

现在你可以编写 try/catch 语句,而不必绑定抛出的错误:

try {   // something throws } catch {   // don't have to do catch(e) }

顺便说一句,对你不关心的 e 的值的捕获行为,有时称为 Pok&eacute;mon 异常处理。 &lsquo;因为你要捕获所有的&rsquo;!

字符串修剪方法

很小但是很好用:

const padded         = '          Hello world   '; padded.trimStart() === 'Hello world   '; padded.trimEnd()   === '          Hello world';

感谢各位的阅读,以上就是“JavaScript的特性有哪些”的内容了,经过本文的学习后,相信大家对JavaScript的特性有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

JavaScript的特性有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

JavaScript引擎V8 8.5的新特性有哪些

这篇文章主要讲解了“JavaScript引擎V8 8.5的新特性有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript引擎V8 8.5的新特性有哪些”吧!Promise.a
2023-06-27

JavaScript中border标记的BORDER特性有哪些

本篇内容主要讲解“JavaScript中border标记的BORDER特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript中border标记的BORDER特性有哪些”吧!
2023-06-03

Spring的特性有哪些

Spring的特性有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Spring引入传统的基于mvc的项目框架结构:Entity / dao / servic
2023-05-31

servlet3的特性有哪些

本篇文章为大家展示了servlet3的特性有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Servlet 3.0 新特性概述Servlet 3.0 作为 Java EE 6 规范体系中一员,随着
2023-05-31

vue3.0的特性有哪些

vue3.0的特性有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。vue是什么软件Vue是一套用于构建用户界面的渐进式JavaScript框架,Vue与其它
2023-06-06

c#的特性有哪些

本篇文章给大家分享的是有关c#的特性有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. ObsoleteAttributeObsoleteAttribute 适用于除组件
2023-06-15

angularjs的特性有哪些

AngularJS的特性有以下几个:1. 双向数据绑定:AngularJS通过利用数据模型和视图之间的数据绑定,实现了自动的双向数据同步。当数据模型发生变化时,视图会自动更新;反之,当视图发生变化时,数据模型也会自动更新。2. 模块化:An
2023-10-07

JSON.stringify()的特性有哪些

这期内容当中小编将会给大家带来有关JSON.stringify()的特性有哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。JSON.stringify() 方法能将一个 JavaScript 对象或值转
2023-06-17

Linux7的特性有哪些

Linux7的特性有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.对Windows 产品的支持早在2009年,微软和红帽签订了一份旨在为Windows和Linux用户提
2023-06-07

Python3.8的特性有哪些

本篇文章为大家展示了Python3.8的特性有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相比,Python对代码
2023-06-14

Python的特性有哪些

这篇文章主要讲解了“Python的特性有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python的特性有哪些”吧!1. 面向对象的特性面向对象的程序设计解决了结构化程序设计的复杂性,使
2023-06-02

编程热搜

目录