该版本是 node.js 的 Version 13,通过 VS Code 一步一步调试,大致了解了 node 的启动流程,同时也对 C++ 的语法和使用有了一些了解
说说 Generator
一、什么是 Generator
The Generator object is returned by a generator function and it conforms to both the iterable protocol and the iterator protocol.
生成器对象是由一个 generator function 返回的,并且它符合可迭代协议和迭代器协议。
可迭代协议
可迭代协议是指允许 JavaScript 对象(可迭代对象)去定义或定制它们的迭代行为,这个对象(或其原型链中的任意一个对象)必须具有一个带 Symbol.iterator
键的属性,其值返回一个对象的无参函数,被返回对象符合迭代器协议
迭代器协议
迭代器协议定义了一种标准的方式来产生一个有限或无限序列的值,并且当所有的值都已经被迭代后,就会有一个默认的返回值
迭代器需要实现 next() 方法,返回一个对象的无参函数,被返回对象拥有两个属性,分别是 (done :Boolean) 迭代器已经超过了可迭代次数时为 true,这时 value 的值可以被省略,除非该迭代器 return 了某个值
[译]Javascript 中你需要知道的一切关于日期的事情
原文地址:Everything You Need to Know About Date in JavaScript
原文作者:Zell Liew
译者: charlie mei
在 Javascript 中日期很奇怪,它让我们紧张不安,以至于我们需要找到其他库(像 Date-fns 和 Moment)在我们需要使用日期和时间的时候(哈!)。
但是我们不总是需要使用库。如果你知道需要注意些什么,日期实际上相当简单。在本文中,我会引导你在 Javascript 中你需要知道的一切关于日期的事情。
首先,我们先承认时区的存在。
时区
世界上有数以百计的时区。在 Javascript 中,我们只关心两个——本地时间和协调世界时(UTC)。
- 本地时间涉及你电脑所在的时区
- UTC是现实中格林尼治标准时间(GMT)的代名词
在 Javascript 中(除了一个)几乎每个日期方法默认都会给你本地时间或者日期。假如你指定了 UTC 那么你只能得到 UTC。
有了这个,我们可以谈一下创建日期了。
创建日期
你可以用new Date()
创建日期。有四种可能的方式使用new Date()
:
- 日期字符串
- 日期参数
- 时间戳
- 没有参数
谷歌扩展开发小记
尝试开发谷歌浏览器扩展,medium 免费阅读器,目前主要是需要对请求进行拦截,修改,
[github 仓库]https://github.com/meijintao233/medium-reader-extension
将一些常用的 API 记录如下:
manifest.json
主要是设置一些位置,展示信息,类似微信小程序的配置 app.json。
Permissions: 设置一些需要获取权限的功能
browser_action: 设置 icon、界面等,浏览器级的扩展,界面 html 和页面的 html 是两个隔离的环境
page_action: 设置 icon、界面等,页面级的扩展,界面 html 和页面的 html 是两个隔离的环境
background: 设置 js 脚本等
[译]JavaScript箭头函数中的不规则
原文地址:Anomalies in JavaScript arrow functions
原文作者:Glad Chinda
译者: charlie mei
介绍
就我而言,我认为箭头函数是 Javascript 语言在 ES6 规范中最棒的语法补充之一——我的意见,顺便提一下。我知道它以后几乎每天都要使用它们,我猜测这对于大多数 Javascript 开发者也是这样的。
箭头函数在很多方面也可以像常规的函数一样使用。然而,它们通常用于在需要匿名函数语句的地方——例如,回调函数。
下面的例子展示了一个箭头函数是怎样被用作回调函数的,特别是数组方法如map()
,filter()
,reduce()
,sort()
等等。
1 | const scores = [ |
一眼过去,箭头函数可能看起来像可以被用于或者定义在每个常规函数也能这样的地方,但事实并不是这样的。出于非常好的原因,箭头函数并不是恰好表现得像常规函数一样。也许箭头函数可以被认为是不规则的 Javascript 函数。
尽管箭头函数有一个相当简单的语法,这不是本文的重点。本文的目标是揭示箭头函数不同于常规函数的主要行为方式以及怎样将这些知识用于开发者的优势。
请注意:在本文中,我会用常规函数或者常规 Javascript 函数的术语表示传统的 Javascript 函数语句或者使用 function 关键字定义的表达式。
正则表达式浅析
介绍
正则表达式在编程中得到广泛的使用,我们可以很方便的通过正则表达式筛选匹配出我们所需要的内容,进而对这些内容进行修改和替换。相比于静态文本匹配,使用正则表达式能带来更多的灵活性,适用的场景也更多。
JS引擎中处理正则使用的是NFA自动机,其特点是执行慢,但是编译快,适合JS这种动态解释型语言,使用过程中要注意正则匹配过程中的回溯,容易造成性能问题。
1 | reg: /te{1,3}st/g |
首先,正则的第一个字符,会与字符串的第一个字符比对,匹配后指针后移到第二个字符e,匹配后,继续后移遇到{1,3}操作符,因为正则匹配是贪婪模式,这时字符串指针会继续后移,遇到第二个e,指针继续后移,发现s和正则e不匹,这时发生回溯,字符串和正则指针回到前一个状态,接着正则指针指向下一个字符s,字符串指针指向下一个字符s,匹配成功,然后继续后移,t也匹配成功,最终完成整个正则匹配过程,匹配结果为teest。从上面可以看出,回溯等于是把之前的操作推倒重来,在设计正则规则的时候需要尽量减少发生回溯的可能。
emoji在JS中的使用
emoji是什么
计算机中的字符都是借助二进制编码来表示,有ASCII,unicode等,ASCII码主要用于显示现代英语和其他西欧语言,其规则是由8个bit组成,第一个bit为0,利用剩余的7个bit组合出128种不同的字符,随着计算机的不断推广,利用单字节编码系统显得力不从心,无法表示出更多的字符,因此需要一个统一的标准,而这就是unicode诞生的原因。
unicode为世界上的所有字符进行了编号,范围从 0x000000 到 0x10FFFF,大多数字符在范围0x0000 到 0xFFFF 之间(即小于 65536),每个字符都有一个 Unicode 编号并且一般用十六进制表示,前置 U+。
emoji也是一个unicode字符,每一个emoji都分配了一个对应的码点(code point),不同的系统对同一个emoji的展示形式也是不同的,如果系统没有实现当前的emoji,那么渲染出来的就是一个系统默认设置的内容