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

你可能错过的现代 JavaScript 特性

发布时间:2019-11-07 23:35 所属栏目:[优化] 来源:疯狂的技术宅
导读:尽管我在过去 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,我们将及时予以处理。

网友评论
推荐文章