设为首页 - 加入收藏 阜新站长网 (http://www.0418zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 用户 2000 阿里 宣布
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

你可能错过的现代 JavaScript 特性

发布时间:2019-11-06 12:23 所属栏目:[优化] 来源:疯狂的技术宅
导读:尽管我在过去 7 年中几乎每天都在写 JavaScript 代码,但不得不承认,我实际上并不是很注意 ES 语言的发布声明。 async/await 和 Proxies 之类的主要特性是一回事,但是每年都有稳定的小规模、渐进式的改进在不断涌现,因为总有一些东西需要学习。 所以在

尽管我在过去 7 年中几乎每天都在写 JavaScript 代码,但不得不承认,我实际上并不是很注意 ES 语言的发布声明。 async/await 和 Proxies 之类的主要特性是一回事,但是每年都有稳定的小规模、渐进式的改进在不断涌现,因为总有一些东西需要学习。

你可能错过的现代 JavaScript 特性

所以在本文中,我收集了一些现代 JavaScript 特性,这些特性在首次发布时并没有带来太多的关注。其中一些只是编码质量的提高,而另外一些确实很方便,可以减少很多代码量。以下是你可能会错过的一些信息:

ES2015

二进制和八进制

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

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

  1. const?binaryZero?=?0b0;?
  2. const?binaryOne??=?0b1;?
  3. const?binary255??=?0b11111111;?
  4. const?binaryLong?=?0b111101011101101;?

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

  1. //?Pizza?toppings?
  2. const?olives????=?0b0001;?
  3. const?ham???????=?0b0010;?
  4. const?pineapple?=?0b0100;?
  5. const?artechoke?=?0b1000;?
  6. ?
  7. const?pizza_ham_pineapple?=?pineapple?|?ham;?
  8. const?pizza_four_seasons??=?olives?|?ham?|?artechoke;?

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

Number.isNaN()

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

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

  1. isNaN(NaN)??????????????===?true?
  2. isNaN(null)?????????????===?false?
  3. isNaN(undefined)????????===?true?
  4. isNaN({})???????????????===?true?
  5. isNaN('0/0')????????????===?true?
  6. isNaN('hello')??????????===?true?

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

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

  1. Number.isNaN(NaN)???????===?true?
  2. Number.isNaN(null)??????===?false?
  3. Number.isNaN(undefined)?===?false?
  4. Number.isNaN({})????????===?false?
  5. Number.isNaN('0/0')?????===?false?
  6. Number.isNaN('hello')???===?false?

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

ES2016

指数(幂)运算符

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

  1. 2**2?===?4?
  2. 3**2?===?9?
  3. 3**3?===?27?

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

Array.prototype.includes()

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

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

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

  1. const?object1?=?{};?
  2. const?object2?=?{};?
  3. ?
  4. const?array?=?[object1,?78,?NaN];?
  5. ?
  6. array.includes(object1)?===?true?
  7. array.includes(object2)?===?false?
  8. array.includes(NaN)?????===?true?

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章