澳门新浦京娱乐场网站-www.146.net-新浦京娱乐场官网
做最好的网站

JavaScript生成GUID的多种算法小结,使用指南

在实战中读书 JavaScript 的多少个工具

2016/06/07 · JavaScript · 工具

本文由 伯乐在线 - HansDo 翻译,HansDo 校稿。未经许可,禁绝转发!
爱尔兰语出处:developer.telerik.com。应接加入翻译组。

每当被问到开拓者应该怎么着深刻学习某一种语言时,作者总会重申的有些是:找到符合自身的上学方法比较重大。提到学习编制程序,大多人会马上想到上边包车型地铁不二秘籍:

  • 阅读有关书籍
  • 临场会议
  • 加入学习培养演练

就算那一个学习手段都是可行的,但对自家的话,它们或多或少都有局地败笔。拿看书学习来讲,作者发现这种艺术唯有当本身旁边放着一台计算机时才有机能。因为在读到有些知识点时,小编必需即刻试着编辑几行代码并运营看看结果,那样能力完全清楚它。

本身异常的痛爱阅读,但自己尽量不在Computer边翻阅,因为自个儿非常少能够在有管理器的情景下把集中力一向聚集在书上。出于那几个缘故,就算笔者每年读的书都游人如织,但唯有非常少的几本是本领类书籍。

临场本事会议来长长见识还足以,可很难让你深刻通晓——平常他们只会花 60 分钟来介绍一种语言或有个别话题,充其量勉励你协和在会后多施行一下关系的技艺。可是值得提的是,有些会议会设置一天的「预前会」,预前会上会安顿一些比较详细的阐述和有关环节——这一个环节对上学生守则更有低价, 尤其是他们有的时候候会提供实验意况,让您同解说者一同入手施行解说中涉及的品类代码。

最后,上课培养磨练的不二等秘书技就算能够令你在长期内获得惊人提升,但前提是你有丰硕的(下班后的)时间和金钱。记得七年前自个儿插足过二个为时一周的 Big Nerd 的学科。课程自己棒极了——但也消耗了作者大把大把的钱和时间。

在地点给出的提出中,笔者关系了在攻读进度中多写一些操演代码,边「玩」边学。作者意识这是用来相当慢调控新本领最棒有效的不二诀要。

于是在那篇小说里,作者会介绍一些不一致于上边那么些健康门路的工具,来帮你「边做边学」JavaScript。那些工具都亟待您编写一些代码来实现各样职务,进而帮您领悟有些具体手艺点、或让你的一体化能力水平得报到并且接受集磨练和增加。大家最早吧!

澳门新浦京娱乐场网站 1

NodeJS 开辟者的 10 个常见错误

2015/06/16 · 澳门新浦京娱乐场网站,CSS · 1 评论

本文由 伯乐在线 - 刘健超-J.c 翻译,黄利民 校稿。未经许可,禁绝转发!
塞尔维亚共和国(Republic of Serbia)语出处:www.toptal.com。接待参预翻译组。

自 Node.js 公诸于世的那一刻,就陪同着表彰和批评的鸣响。那个顶牛仍在不断,何况并不会快速破灭。而小编辈平日忽略掉那么些纠纷发生的从头到尾的经过,各样编制程序语言和平台都以因某个难题而饱受斟酌,而这一个题指标爆发,是留意大家什么样利用这一个平台。不管有多难工夫写出安全的 Node.js 代码,或有多轻易写出高并发的代码,该平台早就有相当短一段时间,并已被用来确立叁个数额强大、稳健和干练的 web 服务器。那一个 web 服务器伸缩性强,并且它们通过在 Internet 上安居的周转时刻,申明本身的平稳。

唯独,像任何平台同样,Node.js 轻便因开辟者难点而惨被切磋。一些谬误会下滑品质,而别的一些题目会让 Node.js 直接崩溃。在那篇文章里,我们将会聊一聊关于 Node.js 新手的 十个常犯错误,并让他们掌握怎样防止这个不当,进而成为一名 Node.js 高手。

澳门新浦京娱乐场网站 2

全局唯一标记符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。

备注:第三遍翻译技巧小说,标题都郁结了长久不精晓肿么翻译,如觉察翻译不当之处,可点击github链接提交商量,thx~

Js-assessment (js-测验)

首先个工具是 Rebecca Murphey 写的 js-assessment , 它的主题其实正是一组测验用例。每条测量检验用例都代表一个亟待你解决的难题。当您通过改换代码让某条测验通过,你也就实现了相应知识点的试验。

来看一 个 arrays 文件里的差相当少的例子:

JavaScript

indexOf : function(arr, item) { },

1
2
3
indexOf : function(arr, item) {
 
},

如您所见,这里给出了一个空函数和它的参数,你需求贯彻该函数的内部逻辑来让它按照期待的章程专门的学问,进而让相应的自动化测量检验用例成功。但是有的时候你须要达成怎么样的法力并不便于一眼就看出来,举例同样在 arrays 文件里有那般贰个函数:

JavaScript

curtail : function(arr) { },

1
2
3
curtail : function(arr) {
 
},

自己研商了一番才搞驾驭(但那正是学习的进度,对吧?),原本它应当落成的功力是去除数组中的第一个成分。

在编排代码的经过中,你能够随时在浏览器里查看当前全体测验用例的举行理并了结果。下图突显的是自身材成当中一些试验时的场地。

澳门新浦京娱乐场网站 3

至于这么些项目小编最心爱的少数是:你能够二遍只化解贰个测量试验用例,从而一小点地成功全部项目,而毫不一次性投入太多时光。

介绍

NodeSchool 是三个针对初学者,教授 Web 开辟本领的免费开源教程(NodeSchool 富含一批教程,不独有是 Node.js 的)。

NodeSchool 的学科由一名目多数任务构成,每一种任务除了健康的叙说,还应该有详细的晋升。如下图所示:

澳门新浦京娱乐场网站 4

错误 #1:阻塞事件循环

JavaScript 在 Node.js (就像在浏览器同样) 提供单线程试行遭逢。那象征你的前后相继不能够相同的时间实践两局地代码,但能由此 I/O 绑定异步回调函数完毕产出。举例:三个起点Node.js 的伏乞是到数据库引擎获取一些文书档案,在那同期允许 Node.js 静心于应用程序别的一些:

JavaScript

// Trying to fetch an user object from the database. Node.js is free to run other parts of the code from the moment this function is invoked.. // 尝试从数据库中收获一个顾客对象。在那几个函数实行的说话,Node.js 有空去运行代码别的一些.. db.User.get(userId, function(err, user) { // .. until the moment the user object has been retrieved here // .. 直到客商对象检索到这里的那一刻 })

1
2
3
4
5
6
// Trying to fetch an user object from the database. Node.js is free to run other parts of the code from the moment this function is invoked..
// 尝试从数据库中获取一个用户对象。在这个函数执行的一刻,Node.js 有空去运行代码其它部分..
db.User.get(userId, function(err, user) {
// .. until the moment the user object has been retrieved here
        // .. 直到用户对象检索到这里的那一刻
})

澳门新浦京娱乐场网站 5

不过,具备总结密集型代码的 Node.js 实例被层层客商端同临时间连接试行时,会产生短路事件循环,并使具有顾客端处于等候响应状态。总计密集型代码,包涵尝试给四个庞然大物数组实行排序操作和平运动作一个非常长的巡回等。比方:

JavaScript

function sortUsersByAge(users) { users.sort(function(a, b) { return a.age > b.age ? -1 : 1 }) }

1
2
3
4
5
function sortUsersByAge(users) {
users.sort(function(a, b) {
return a.age > b.age ? -1 : 1
})
}

基于小 “users” 数组实行 “sortUserByAge” 函数,只怕没什么难题,当基于巨大数组时,会严重影响总体品质。借使在不得不那样操作的境况下,你必得保险程序除了等待事件循环而别无他事(举例,用 Node.js 创建命令行工具的一部分,整个东西一块运营是没难题的),然后那大概没难点。可是,在 Node.js 服务器实例尝试同临时间服务广大个客户的景况下,那将是三个消亡性的标题。

一旦客商数组是从数据库检索出来的,有个消除办法是,先在数据库中排序,然后再平昔找寻。假诺因急需总结强大的金融交易历史数据总和,而致使堵塞事件循环,那能够创建额外的worker / queue 来制止阻塞事件循环。

正如您所阅览的,那并未有新手艺来化解那类 Node.js 难点,而每一种状态都亟待单独管理。而基本消除思路是:不要让 Node.js 实例的主线程推行 CPU 密集型工作 – 顾客端同有时候链接时。

GUID是一种由算法生成的二进制长度为1二十七位的数字标记符。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,个中的 x 是 0-9 或 a-f 范围内的一个叁11个人十六进制数。在地道图景下,任何Computer和管理器集群都不会转换八个一样的GUID。

明日本人为四个类型写README文书档案,笔者盼望任何开荒者能够见到这一个项目,并从当中学到一些东西。忽然小编发觉到,若放在几年前,我创作的进度中随便张口提到的Node,npm,Homebrew,git,测量试验还会有产品创设,会把本身魂都吓没了。

NodeSchool

NodeSchool  并不只是 Node.js,事实上它回顾了有关JavaScript 的各样学科。课程覆盖了从 JavaScript 基础到 Node(既然叫NodeSchool当然要有Node。) 以致 WebGL 的内容。你能够先安装最感兴趣的课程, 可一旦还不熟稔 JavaScript 的话,作者引入从 javascripting 课程开首。

Shell

npm install -g javascripting

1
npm install -g javascripting

下一场只须求在命令行里输入 javascripting

澳门新浦京娱乐场网站 6

本条赏心悦指标古典风格菜单会唤醒您挑选多少个子课程,然后实际的引导和练习音信就能显得出来。

澳门新浦京娱乐场网站 7

在乎上边最终两行内容,这些命令行程序 javascripting 还是可以够够注解你写的顺序是或不是切合需要。你借使写好解题代码,然后到命令行里去做到验证就足以成功相应的子课程了。

上边是验证被小编故意写错的代码时的输出:

澳门新浦京娱乐场网站 8

你可以看出此间的辅助消息一定详尽—— 其实还有更加多的消息未有呈现出来,因为显示器上实在展现不下了。当然,javascripting 终究是给没接触过 JS 的人希图的科目。即便自个儿不认为别的的科目也会提供那样多救助,但作者眼下还没被哪些难题难倒过。这里的难题平时一分钟内就能够解决——最多也就30分钟。那一个顺序还有只怕会趁着你的进程贴心地方统一标准记出你成功的勤学苦练,以及还应该有何样挑衅等着您。

澳门新浦京娱乐场网站 9

日前作者提起,你能够在 NodeSchool 找到各连串型的教程。他们还会有一个关于 ES6 的学科,所以假使您想获取部分有关那项抢手本事的左边经验,NodeSchool 会是一个能帮你飞速明白它的绝佳选取。

Node.js 教程的安装

第 1 步 安装: Node.js
Windows 有 .exe 的安装包,Mac 用 Homebrew 安装。在指令行中实施 node -v, 显示 Node.js 的版本号表示安装成功。

第 2 步: 安装 NodeSchool
在命令中举办如下命令:

npm install -g learnyounode

在命令行中推行 learnyounode, 若出现如下图所示的上学目录,则象征安装成功。

澳门新浦京娱乐场网站 10

拜会都以保加华雷斯语?别怕,能够将语言切换到普通话。方法:实践learnyounode,开关盘上的下移键,将光标移动到CHOOSE LANGUAGE 按回车,选择简体中文 按回车就能够。切换后如下图所示:

澳门新浦京娱乐场网站 11

错误 #2:调用回调函数多于二次

JavaScript 一贯都以借助于回调函数。在浏览器中,处管事人件是因此调用函数(平时是无名氏的),这一个动作就好像回调函数。Node.js 在推荐 promises 在此之前,回调函数是异步成分用来相互连接对方的独一方法 。以后回调函数仍被使用,而且包开辟者如故围绕着回调函数设计 APIs。贰个关于采用回调函数的常见 Node.js 难点是:不仅仅三次调用。日常状态下,几个包提供二个函数去异步管理部分事物,设计出来是期望有贰个函数作为最终多个参数,当异步义务达成时就能被调用:

JavaScript

module.exports.verifyPassword = function(user, password, done) { if(typeof password !== ‘string’) { done(new Error(‘password should be a string’)) return } computeHash(password, user.passwordHashOpts, function(err, hash) { if(err) { done(err) return } done(null, hash === user.passwordHash) }) }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
module.exports.verifyPassword = function(user, password, done) {
if(typeof password !== ‘string’) {
done(new Error(‘password should be a string’))
return
}
 
computeHash(password, user.passwordHashOpts, function(err, hash) {
if(err) {
done(err)
return
}
 
done(null, hash === user.passwordHash)
})
}

专一每一遍调用 “done” 都有多少个回去语句(return),而结尾八个 “done” 则可省略重临语句。那是因为调用回调函数后,并不会活动终止如今施行函数。借使第二个“return” 注释掉,然后给那些函数字传送进一个非字符串密码,导致 “computeHash” 仍旧会被调用。那有赖于 “computeHash” 如哪个地区理那样一种情景,“done” 也许会调用多次。任何一个人在别处使用那一个函数只怕会变得措手不如,因为它们传进的该回调函数被一再调用。

只要小心就足以幸免那些 Node.js 错误。而部分 Node.js 开采者养成一个习贯是:在各类回调函数调用前加多三个 return 关键字。

JavaScript

if(err) { return done(err) }

1
2
3
if(err) {
return done(err)
}

对此大多异步函数,它的再次回到值大概是抽象的,所以该格局能让您很好地制止那几个主题材料。

GUID 的总额到达了2^128(3.4×10^38)个,所以随意生成多个一律GUID的也许性异常的小,但并不为0。GUID一词有时也专指微软对UUID规范的落到实处。

已经有段日子,三个前端开技术员主导的办事流程是:编辑文件,本地质度量试下(尽大家恐怕产生极致),然后经过FTP上盛传服务器。咱们评价多个前端程序员的水平,是透过他是不是能够包容IE6,或许取得跨浏览器的像素级的平等。非常多社区的成员——包含自家在内——缺少古板的编制程序经验。HTML、CSS和JavaScript——平时指jQuery——是自学的本事。

Advent of Code(代码惠临,又名穷凶极恶之塔)

接下去这些是本人最爱——呃或然是最讨厌的一个连串——好呢,作者就是如此三个朝秦暮楚的人。 在二〇一八年的圣诞季,作者发表 Advent of Code 的时候,他扬言那是一种能够用来「轻巧欢娱地」打发圣诞节日假期日的诀要。那些中的每个编制程序挑战都跟圣诞节核心相关,何况每一种都含有八个难点。可是貌似情形下,只必要在首先道题的答案上做十分小改动就会博取第二道的答案。

澳门新浦京娱乐场网站 12

那几个标题并不限量使用的编制程序语言,所以您能够用它来读书别的语言,而不只是 JavaScript。刚起先的率先道题很轻便:

澳门新浦京娱乐场网站 13

要完结这一题,只要读取给定的不胜不长的输入字符串、分析它的源委并展开简易计算就能够了。上边是小编的解题代码——是的,作者领会那实际不是最佳的解法,可是对自个儿来讲够用了。

JavaScript

var input = '()(((( LOTS OF TEXT REMOVED ()('; var floor = 0; for(var i=0;i<input.length;i ) { var char = input.charAt(i); if(char === '(') floor ; if(char === ')') floor--; } console.log("Done - " floor);

1
2
3
4
5
6
7
8
9
10
11
var input = '()((((  LOTS OF TEXT REMOVED ()(';
 
var floor = 0;
 
for(var i=0;i<input.length;i ) {
    var char = input.charAt(i);
    if(char === '(') floor ;
    if(char === ')') floor--;
}
 
console.log("Done - " floor);

这一题的第二有的也很简短 ——作者只花了大意上一分钟时间改了一晃代码,就能让代码在循环中保存相符条件的十三分值了。

看起来有一点点儿意思对吗?可是那一个主题素材的难度快捷就能够升高到令人心寒的品位(最少对自个儿来说)。比方第24题:给您一组包裹和他们的分量新闻,你须要把那么些包裹分为三组,并保险每种组里包裹的占有率之和相当。噢对了,要确认保障第一组的包裹数量是一丁点儿的,那样圣诞老人才有地点坐…噢还大概有!第一组还要有限补助最小的“量子纠结态”—— 这几个值是将装有包裹的轻重相乘求积得来的。

在做这一题的时候,作者作弊了… 事实上小编概略一共没羞没臊地作弊了四题。这个标题都有照望的 Reddit 博客链接,你能够在地点学习人家的解法。对于那几道难住自个儿的题,小编在这里找到了其它语言完毕的解法,并接纳他们的解题思路调换到JavaScript 完毕了挑衅。

开头学习

在命令行中实施 learnyounode 。选取想学的学科,按回车键,早先读书。

倘使读了职责的陈述和提醒,你仍然不通晓不能够动手,能够到探讨区提问。

错误 #3:函数嵌套过深

函数嵌套过深,时常被称作“回调函数鬼世界”,但那并非 Node.js 自己难点。可是,这会导致一个题目:代码异常的快失去调控。

JavaScript

function handleLogin(..., done) { db.User.get(..., function(..., user) { if(!user) { return done(null, ‘failed to log in’) } utils.verifyPassword(..., function(..., okay) { if(okay) { return done(null, ‘failed to log in’) } session.login(..., function() { done(null, ‘logged in’) }) }) }) }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function handleLogin(..., done) {
db.User.get(..., function(..., user) {
if(!user) {
return done(null, ‘failed to log in’)
}
utils.verifyPassword(..., function(..., okay) {
if(okay) {
return done(null, ‘failed to log in’)
}
session.login(..., function() {
done(null, ‘logged in’)
})
})
})
}

澳门新浦京娱乐场网站 14

任务有多复杂,代码就有多不佳。以这种艺术嵌套回调函数,我们很轻便就能够蒙受难题而夭亡,并且难以阅读和掩护代码。一种代替格局是以函数注明那么些职责,然后将它们连接起来。就算,有一种最绝望的格局之一 (有争论的)是选取 Node.js 工具包,它极其管理异步 JavaScript 情势,举例 Async.js :

JavaScript

function handleLogin(done) { async.waterfall([ function(done) { db.User.get(..., done) }, function(user, done) { if(!user) { return done(null, ‘failed to log in’) } utils.verifyPassword(..., function(..., okay) { done(null, user, okay) }) }, function(user, okay, done) { if(okay) { return done(null, ‘failed to log in’) } session.login(..., function() { done(null, ‘logged in’) }) } ], function() { // ... }) }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function handleLogin(done) {
async.waterfall([
function(done) {
db.User.get(..., done)
},
function(user, done) {
if(!user) {
return done(null, ‘failed to log in’)
}
utils.verifyPassword(..., function(..., okay) {
done(null, user, okay)
})
},
function(user, okay, done) {
if(okay) {
return done(null, ‘failed to log in’)
}
session.login(..., function() {
done(null, ‘logged in’)
})
}
], function() {
// ...
})
}

恍如于 “async.waterfall”,Async.js 提供了重重任何函数来缓慢解决不一样的异步格局。为了简洁,我们在此地运用三个较为简单的案例,但实则情况频频更糟。

算法1

那一个业务在过去的几年里发出了扭转。可能是因为大家开端认真的对待前端开采者的劳作,可能是因为浏览器开拓商开始如蚁附膻(趋向平等?原句getting their shit together),又或许是前面一个开荒者自个儿——同样,包含自身在内——开头看见软件开拓变得周密的晨光。

来点不同的…

DevTools Challenger 是贯彻了“边做边学”思想的八个一流棒的的楷模,纵然它的内容和 JavaScript 语言无关。它是 Rachel Nabors 开荒的一套体现案例,用来演示通过 Firefox 的开垦者工具来调治 CSS 动画的各样措施。

澳门新浦京娱乐场网站 15

尽管 CSS 动画不是笔者的菜,但自己依旧挺喜欢开辟者工具的。在自己见过的介绍开垦者工具的网址里,这一个连串恐怕是分界面最出彩、同一时间也是最和气的二个。

运维代码

完了职分后,能够用如下二种方法运维代码:
方式1:

node 程序文件.js

方式2:

learnyounode run 程序文件.js

错误 #4:期望回调函数以三头方式运转

异步程序的回调函数实际不是 JavaScript 和 Node.js 唯有的,但它们是导致回调函数流行的从头到尾的经过。而对于另外编制程序语言,大家神不知鬼不觉地感到奉行各样是一步接一步的,如多少个语句将会进行完第一句再实行第二句,除非那四个语句间有一个眼看的跳转语句。就算那样,它们经常局限于条件语句、循环语句和函数调用。

但是,在 JavaScript 中,回调某些特定函数只怕并不会应声运维,而是等到职务达成后才运转。上面例子即是直到未有其余职责,当前函数才运营:

JavaScript

function testTimeout() { console.log(“Begin”) setTimeout(function() { console.log(“Done!”) }, duration * 1000) console.log(“Waiting..”) }

1
2
3
4
5
6
7
function testTimeout() {
console.log(“Begin”)
setTimeout(function() {
console.log(“Done!”)
}, duration * 1000)
console.log(“Waiting..”)
}

你会专一到,调用 “testTimeout” 函数会首先打字与印刷 “Begin”,然后打印“Waiting..”,紧接大概一秒后才打字与印刷 “Done!”。

别的二个亟需在回调函数被触发后实行的东西,都要把它放在回调函数内。

复制代码 代码如下:

不管怎么说,大家看看前端开采的严重性,从麻烦转向了珍视工具化。想要成为一名成功的前端开荒者,你需求领会一套新的底蕴工夫,而不满意须求的前端开荒者会深感觉落后越来越多,而那多少个正在享受他们知识的程序员们感到那一个事情是大势所趋的。

其它的选料

当然这一类的上学能源还应该有许多。上面列出了别的多少个能够设想的选项,像以后同一,作者提出大家把团结行使过的切近工具发到上面包车型地铁争辨区里,和大家一起享用。

  • The JavaScript Warrior –  在尝试通过代码调整贰个英豪的进度中学习和练习 JavaScript。
  • WarriorJS – 跟上面二个近似的编制程序挑衅。
  • Untrusted – 用你的 JavaScript 来对抗邪恶大学生!

打赏支持作者翻译越来越多好文章,多谢!

打赏译者

证曹魏码

在规定职务实现后,用如下命令验证你的次第与义务的渴求是还是不是一律:

learnyounode verify 程序文件.js

地方命令运营成功后,会生成测量试验报告。假使注脚成功,该学科会被标识为完成。借使战败,能够在测量检验报告中观测程序的预期值和事实上的值的出入,修改代码后,推行 learnyounode run 程序文件.js 再打开求证。

输入 learnyounode 步向下两个科目标上学。

错误 #5:用“exports”,而不是“module.exports”

Node.js 将每一种文件视为多少个孤立的小模块。就算你的包(package)含有多少个公文,大概是 “a.js” 和 “b.js”。因为 “b.js” 要博取 “a.js” 的功能,所以 “a.js” 必需经过为 exports 对象增加属性来导出它。

JavaScript

// a.js exports.verifyPassword = function(user, password, done) { ... }

1
2
// a.js
exports.verifyPassword = function(user, password, done) { ... }

当那样操作后,任何引进 “a.js” 模块的公文将会拿走二个包含属性方法 “verifyPassword” 的靶子:

JavaScript

// b.js require(‘a.js’) // { verifyPassword: function(user, password, done) { ... } }

1
2
// b.js
require(‘a.js’) // { verifyPassword: function(user, password, done) { ... } }

而是,如若大家想一向导出那个函数,而不是作为有些对象的质量呢?我们能透过覆盖 exports 对象来实现那么些指标,但大家不能够将它正是叁个全局变量:

JavaScript

// a.js module.exports = function(user, password, done) { ... }

1
2
// a.js
module.exports = function(user, password, done) { ... }

瞩目,大家是如何将 “exports” 作为 module 对象的二个属性。在此地领悟 “module.exports” 和 “exports” 之间分化是拾分主要的,何况那日常会招致 Node.js 开荒菜鸟们发出挫败感。

function uuid() {
    var s = [];
    var hexDigits = "0123456789abcdef";
    for (var i = 0; i < 36; i ) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[14] = "4";  // bits 12-15 of the time_hi_and_version field to 0010
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
    s[8] = s[13] = s[18] = s[23] = "-";

上边提到的一对内容是自己盼望大家能够熟悉的,除此而外还也许有一部分相关的能源,借让你认为您要求在成年人的道路上加速的话。(感谢PaulIrish,Mike Taylor,Angus Croll,以及Vlad Fillppov的孝敬)

打赏帮忙自个儿翻译更加多好作品,多谢!

任选一种支付办法

澳门新浦京娱乐场网站 16 澳门新浦京娱乐场网站 17

1 赞 7 收藏 评论

更加多课程

上文提到是 NodeSchool 中 Node.js 相关的教程,除却,NodeSchool 还包涵: JavaScriptWebGL函数式编程Gitnpm 等一批课程。那几个课程能够在官网的首页中找到。

大家会用学会 NodeSchool 了呢~ 点击这里 报名,一同学起来吧!

错误 #6:在回调函数内抛出荒谬

JavaScript 有个“卓殊”概念。非凡管理与相当多观念语言的语法类似,比如 Java 和 C ,JavaScript 能在 try-catch 块内 “抛出(throw)” 和 捕捉(catch)分外:

JavaScript

function slugifyUsername(username) { if(typeof username === ‘string’) { throw new TypeError(‘expected a string username, got ' (typeof username)) } // ... } try { var usernameSlug = slugifyUsername(username) } catch(e) { console.log(‘Oh no!’) }

1
2
3
4
5
6
7
8
9
10
11
12
function slugifyUsername(username) {
if(typeof username === ‘string’) {
throw new TypeError(‘expected a string username, got ' (typeof username))
}
// ...
}
 
try {
var usernameSlug = slugifyUsername(username)
} catch(e) {
console.log(‘Oh no!’)
}

可是,如若您把 try-catch 放在异步函数内,它会超过你意料,它并不会施行。比方,假如您想维护一段含有比相当多异步活动的代码,并且这段代码包括在贰个 try-catch 块内,而结果是:它不必然会运转。

JavaScript

try { db.User.get(userId, function(err, user) { if(err) { throw err } // ... usernameSlug = slugifyUsername(user.username) // ... }) } catch(e) { console.log(‘Oh no!’) }

1
2
3
4
5
6
7
8
9
10
11
12
try {
db.User.get(userId, function(err, user) {
if(err) {
throw err
}
// ...
usernameSlug = slugifyUsername(user.username)
// ...
})
} catch(e) {
console.log(‘Oh no!’)
}

即使回调函数 “db.User.get” 异步触发了,固然作用域里包蕴的 try-catch 块离开了上下文,照旧能捕捉那四个在回调函数的抛出的失实。

那正是 Node.js 中如什么地方理错误的另外一种办法。别的,有不能缺少遵从全部回调函数的参数(err, …)形式,全体回调函数的率先个参数期望是四个荒唐对象。

    var uuid = s.join("");
    return uuid;
}

JavaScript

有关作者:HansDo

澳门新浦京娱乐场网站 18

游走于Web前后端,一直在野路子上探索着。对美术和数学有心无力(・-・*),尽其所能做二个劳动者。 个人主页 · 小编的稿子 · 18 ·    

澳门新浦京娱乐场网站 19

错误 #7:以为数字是整型

数字在 JavaScript 中都以浮点型,JS 未有整型。你大概不可能预料到那将是一个难点,因为数大到过量浮点型范围的景况并不普遍。

JavaScript

Math.pow(2, 53) 1 === Math.pow(2, 53)

1
Math.pow(2, 53) 1 === Math.pow(2, 53)

不幸的是,在 JavaScript 中,这种关于数字的好奇情形远不独有于此。即便数字都以浮点型,对于上面的表达式,操作符对于整型也能平常运转:

JavaScript

5 >> 1 === 2 // true

1
5 >> 1 === 2 // true

唯独,不像算术运算符那样,位操作符和移动操作符只好操作后 三十八人,就好像 “整型” 数。比方,尝试位移 “Math.pow(2,53)” 1 位,会收获结果 0。尝试与 1 举行按位或运算,获得结果 1。

JavaScript

Math.pow(2, 53) / 2 === Math.pow(2, 52) // true Math.pow(2, 53) >> 1 === 0 // true Math.pow(2, 53) | 1 === 1 // true

1
2
3
Math.pow(2, 53) / 2 === Math.pow(2, 52) // true
Math.pow(2, 53) >> 1 === 0 // true
Math.pow(2, 53) | 1 === 1 // true

您恐怕比非常少需求管理不小的数,但要是你实在要拍卖的话,有成都百货上千大整型库能对大型精度数达成重大的数学生运动算,如  node-bigint。

算法2

这些不要多说,但只是知道二个javascript库再也缺乏了。笔者而不是说你须求理解什么用原生的JavaScript达成二个JavaScript库的兼具天性,但你必要明白,什么日期实在供给用库,同期,在无需用库的时候,有工夫用简易而古老的JavaScript实现你的办事。

错误 #8:忽略了 Streaming(流) API 的优势

我们都说想创立二个微型代理服务器,它能响应从其余服务器获取内容的乞求。作为多个案例,大家将创设贰个供应 Gravatar 图像的Mini Web 服务器:

JavaScript

var http = require('http') var crypto = require('crypto') http.createServer() .on('request', function(req, res) { var email = req.url.substr(req.url.lastIndexOf('/') 1) if(!email) { res.writeHead(404) return res.end() } var buf = new Buffer(1024*1024) http.get(''), function(resp) { var size = 0 resp.on('data', function(chunk) { chunk.copy(buf, size) size = chunk.length }) .on('end', function() { res.write(buf.slice(0, size)) res.end() }) }) }) .listen(8080)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var http = require('http')
var crypto = require('crypto')
 
http.createServer()
.on('request', function(req, res) {
var email = req.url.substr(req.url.lastIndexOf('/') 1)
if(!email) {
res.writeHead(404)
return res.end()
}
 
var buf = new Buffer(1024*1024)
http.get('http://www.gravatar.com/avatar/' crypto.createHash('md5').update(email).digest('hex'), function(resp) {
var size = 0
resp.on('data', function(chunk) {
chunk.copy(buf, size)
size = chunk.length
})
.on('end', function() {
res.write(buf.slice(0, size))
res.end()
})
})
})
.listen(8080)

在那个非常例子中有八个 Node.js 难点,大家从 Gravatar 获取图像,将它读进缓存区,然后响应须要。那不是一个多么不佳的题目,因为 Gravatar 重回的图像并非一点都不小。不过,想象一下,纵然大家代理的内容大小有无尽兆。那就有二个更好的方式了:

JavaScript

http.createServer() .on('request', function(req, res) { var email = req.url.substr(req.url.lastIndexOf('/') 1) if(!email) { res.writeHead(404) return res.end() } http.get(''), function(resp) { resp.pipe(res) }) }) .listen(8080)

1
2
3
4
5
6
7
8
9
10
11
12
13
http.createServer()
.on('request', function(req, res) {
var email = req.url.substr(req.url.lastIndexOf('/') 1)
if(!email) {
res.writeHead(404)
return res.end()
}
 
http.get('http://www.gravatar.com/avatar/' crypto.createHash('md5').update(email).digest('hex'), function(resp) {
resp.pipe(res)
})
})
.listen(8080)

这里,大家赢得图像,并简要地通过管道响应给客商端。绝无需我们在响应在此以前,将全体内容读取到缓冲区。

复制代码 代码如下:

那象征,你早就读过《JavaScript语言特出》—— 希望不唯有一遍。你知道像对象、数组那样的数据结构;函数,包蕴哪些、为啥您需求~call
和apply
他俩;精通原型承袭;精晓javascript的异步操作。
倘诺您的原生JS相比较弱,这里有部分财富能够帮到你:

错误 #9:把 Console.log 用于调节和测量试验指标

在 Node.js 中,“console.log” 允许你向调整台打字与印刷差非常少具有东西。传递贰个目的给它,它会以 JavaScript 对象字面量的办法打印出来。它接受大肆多少个参数,并以空格作为分隔符打字与印刷它们。有无数个理由让开辟者很想用这么些来调整(debug)本人的代码;可是,作者刚强提议你防止在真正程序里使用 “console.log” 。你应有幸免在全体代码里使用 “console.log” 进行调和(debug),当无需它们的时候,应注释掉它们。相反,使用特地为调节和测量试验创建的库,如:debug。

当你最早编写制定应用程序时,那些库能方便地运转和剥夺某行调节和测量检验(debug)效率。举个例子,通过不安装 DEBUG 碰到变量,能够免卫全数调节和测施行被打字与印刷到终极。使用它很简短:

JavaScript

// app.js var debug = require(‘debug’)(‘app’) debug(’Hello, %s!’, ‘world’)

1
2
3
// app.js
var debug = require(‘debug’)(‘app’)
debug(’Hello, %s!’, ‘world’)

为了运维调节和测推行,将情形变量 DEBUG 设置为 “app” 或 “*”,就能够大约地运作这一个代码了:

JavaScript

DEBUG=app node app.js

1
DEBUG=app node app.js

function guid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
        return v.toString(16);
    });
}

  • 《JavaScript编制程序精解》:一本能够带你回归JavaScript基础的书,挺不错的(有纸质版的)
  • 《测量检验驱动的JS评价》:一二种退步测量检验,它们覆盖了差异的JavaScript大旨;你可见编写让测量检验通过的代码吗?
  • 《笔者从jQuery源码中学到的10点》:PaulIrish给大家带来的礼品,纵然比较旧,但的确不易,它让大家驾驭从阅读外人的代码中所能学到的事物。

错误 #10:不采纳管理程序

不论您的 Node.js 代码运维在生产遇到依然本地开荒意况,二个监理管理程序能很好地保管你的次序,所以它是多个万分有效并值得全数的东西。开辟者设计和完结今世运用时经常推荐的多少个极品施行是:快捷退步,火速迭代。

如果发生贰个预料之外的荒唐,不要试图去管理它,而是让您的主次崩溃,并有个监察和控制者在几秒后重启它。管理程序的实惠不唯有是重启崩溃的次第。那些工具允许你重启崩溃的程序的同期,也同意文件发出改动时重启程序。那让开拓Node.js 程序成为一段更欢娱的感受。

有相当多 Node.js 可用的军管程序。举例:

  • pm2
  • forever
  • nodemon
  • supervisor

富有这一个工具各有高低。一些福利在同一个机械里管理多少个应用程序,而其余擅擅长日志管理。可是,借使您想起来选拔那么些程序,它们都以很好的选拔。

算法3

Git(还会有一个Github账户)

总结

正如您所明白的那样,一些 Node.js 难题能对您的顺序形成衰亡性打击。而有个别则会在你品味达成最简便易行的事物时,让您生出挫败感。就算Node.js 的费用门槛非常低,但它依然有很轻便搞混的地点。从别的编制程序语言转过来学习 Node.js 开拓者可能会遇见那一个难题,但这几个错误在 Node.js 新手中也是特出广大的。幸运的是,它们很轻便制止。作者梦想这些轻便辅导能扶助Node.js 新手写出更美观的代码,并为大家付出出平安火速的软件。

打赏协助本身翻译越多好小说,多谢!

打赏译者

复制代码 代码如下:

如若你没访谈过Github,你相对无法参加到这些能源丰裕的开源社区中来,它曾经在前端开采技术领域表现蓬勃之势。克隆三个分支然后跑一下应该成为你的习于旧贯,同时您要求明白在三个人搭档的品类中哪些选拔分支。

打赏协理本身翻译更加多好小说,感激!

任选一种支付方式

澳门新浦京娱乐场网站 20 澳门新浦京娱乐场网站 21

1 赞 7 收藏 1 评论

function guid() {
JavaScript生成GUID的多种算法小结,使用指南。    function S4() {
       return (((1 Math.random())*0x10000)|0).toString(16).substring(1);
    }
    return (S4() S4() "-" S4() "-" S4() "-" S4() "-" S4() S4() S4());
}

急需进级你的git
技能?

关于我:刘健超-J.c

澳门新浦京娱乐场网站 22

前端,在路上... 个人主页 · 小编的文章 · 19 ·     

澳门新浦京娱乐场网站 23

算法4

  • help.github.com
  • Github git cheat sheet
  • More cheat sheet
  • More git links

复制代码 代码如下:

模块化,重视管理,产品创设

function uuid(len, radix) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
    var uuid = [], i;
    radix = radix || chars.length;

透过在页面塞多少个script或style标签来治本信任的日子已经一无往返了。固然你还未能能够将RequireJS引进你的劳作流程中去,也相应找时间在友好的民用项目,或像Backbone Boilerplate那般的项目里试下它,因为它能给大家带来多数好处。RequireJS能够让您付出的JS、CSS文件保持模块化、粒度丰裕细,而在产品上线前可以因此配套的优化学工业具举行理文件件减弱、合併。

    if (len) {
      // Compact form
      for (i = 0; i < len; i ) uuid[i] = chars[0 | Math.random()*radix];
    } else {
      // rfc4122, version 4 form
      var r;

英特尔听上去很可怕?再也未有借口什么也不干了。最少,你应当通晓存在像UglifyJS、Closure Compiler这么的工具,它们可以在你的成品上线前,对你的代码实行智能压缩和合并。

      // rfc4122 requires these characters
      uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
      uuid[14] = '4';

万一您还在写原生的CSS —— 相当于说,前段时间未有用像Sass大概Stylus那样的CSS预管理器 —— RereireJS也能够帮您保持你的CSS文件模块化。在贰个基础样式文件里选拔@import
宣示来加载相关重视文件,然后对那么些基础文件运转ReqireJS Optimizer来创设实际生育条件所要用到的公文。

      // Fill in random data.  At i==19 set the high bits of clock sequence as
      // per rfc4122, sec. 4.1.5
      for (i = 0; i < 36; i ) {
        if (!uuid[i]) {
          r = 0 | Math.random()*16;
          uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
        }
      }
    }

浏览器内置开荒者工具

    return uuid.join('');
}

在过去的几年里,基于浏览器的开辟工具已经大大获得了提高,尽管你明白怎么选择好它们来讲,它们能够大大提升你的开采体验。(提醒:假设你还在使用alert

本条能够钦定长度和基数。举个例子

调护治疗代码的话,你会浪费广大小时)
您恐怕需求规定一款浏览器,你根本运用它的开拓者工具 —— 前段时间本身相当的赞成于选拔GoogleChrome开荒者工具 —— 但不要立刻抛弃别的浏览器的开采者工具,因为他俩日常会基于开采者的报告来增多有用的特征。特别值得一说的是,Opera的Dragonfly的少数职能让它的开辟者工具标新立异,比方(尚在实验中的)CSS剖判器,可顾客自定义的键盘飞速键,无需USB连接的中距离调节和测量检验,以及可以保留并采纳自定义的调色板。

复制代码 代码如下:

命令行

// 8 character ID (base=2)
uuid(8, 2)  //  "01001010"
// 8 character ID (base=10)
uuid(8, 10) // "47473046"
// 8 character ID (base=16)
uuid(8, 16) // "098F4D35"

谈到命令行,适应它(being comfortable with it)再亦非可选择了——倘若您从未希图好坐到终端窗口前,并亲自入手敲命令行的话,你一路上会失掉相当多的东西。笔者并不是说你必得在顶峰上成功全体业务——作者不会抢走你的git GUI(图形化顾客操作分界面),就算本身的确认为最后你相差它会更加好——但无论是做怎么样类型,你最佳一向开着您的吩咐行终端。上边多少个命令行职分是您必需不假思虑就务须能够一鼓作气的:

您大概感兴趣的篇章:

  • 浅谈js中字符和数组一些主导算法题
  • javascript算法题:求任性一个1-9位不另行的N位数在该结合中的大小排列序号
  • javascript算法题 求放肆三个1-9位不另行的N位数在该结合中的大小排列序号
  • js调换排序 冒泡排序算法(Javascript版)
  • js数组去重的5种算法完成
  • 很好用的js日历算法详细代码
  • javascript常用非凡算法实例详解
  • Javascript中的常见排序算法
  • 一个粗略的JavaScript 日期总计算法
  • 面试常见的js算法题
  • ssh登陆另一台机器或服务器

  • scp拷贝文件到另一台机械或服务器

  • ack只怕grep找到文件名包含有个别字符串或符合某种情势的公文

  • find定位文件名契合某种形式的文本

  • git最少能够用它完毕如下事情:add,commit,status
    和pull

  • brew通过Homebrew 来安装文件

  • npm 安装Node包

  • gem安装Ruby包

若是略微命让你用得比较多,你能够编辑.bashrc

  • 或者.profile
  • 或者.zshrc
  • 或然别的,然后创立alias,那样您就不用像此前那么敲比较多字符。你也能够增添alias到你的~/.gitconfig
    文件里。Gianni Chiappetta的dofiles是个科学的圭表。

小心:假诺您在Windows上开辟,我不知晓怎么着扶持你,除了提议利用Cygwin。在Windows上加入前端开源社区的移动比较劳顿,当然小编说的不自然不利。相反的,MacBook Air平价、壮大,并且出乎意料地便携,並且连接会有Ubuntu也许各个*nix。
(web前端学习调换群:328058344 禁止闲谈,非喜勿进!)

前面叁个模板

在不久事先,对于前端的XH奥迪Q5供给,服务器标准的回复格局是回来一段HTML文本。但在过去的12到二十三个月间,前端开采社区察看了曙光,要求服务端再次回到单纯的数据。将数据转成HTML是件劳动的政工,假使管理得倒霉的话,可珍重性会相当差。那就是前边四个模版库诞生的目标:你仅须要保障一套模板,在必要的时候提供数据,就能够将模板调换到HTML。在模板库的抉择上急需救助?Garann Mean的template chooser能够给你指明方向。

CSS预管理器

PaulIrish前几日注意到,前端开垦者编写的代码,跟最后在生产条件陈设的异样初步变得异常的大。通过CSS预管理器写出来的代码正是很好的事例。如故有无数人持之以恒说原生的CSS才是唯一的出路,但它们离大家越来越近(but they are starting to come around)。那么些工具提供了有个别按理来讲CSS属性早已该有的风味,包含——变量、数学生运动算、逻辑、混合(mixin),它们可以帮你从一批冗余的性状前缀中解放出来。

测试

编写模块化、松耦合代码的野趣之一正是,你的代码变得很容测验。假如你用了Grunt那般的工具,创造三个包涵测量试验用例的类别再轻巧但是了。即使Grunt集成了QUnit,不过还应该有众多测框架供你挑选——Jasmine和Mocha是本身喜欢的三个测量检验框架——框架的选项决议于你的私有偏爱,以及你项目标结构(the mark up of the rest of your stack)。

一经你的代码是模块化、松耦合的,测验是件有意思的业务。但是,对于那个组织不好的代码,测量试验不单困难,不常照旧不只怕的。换句话说,强迫自身编辑测量试验用例——以至恐怕在你正式编码在此之前——有利于帮您理清你的思绪以及你的代码组织。后续当你重构你的代码的时候,它也能让您充满自信。

自身录像的一段非常短的录制,关于怎么样运用Jasmine测量试验jQuery

一个jquery-bbq插件单元测验的例子

流程自动化(rake/make/grunt/其余)

流程自动化的一个例证:通过Grunt创造内置单元测验的类型。前端开采的现状是,大家有一大堆重复性的劳作必要做,但有个对象早已告诉笔者,四个好的开垦者是个“懒惰”的开拓者:重要的一些是,假若你开采本身做同一件同样的风浪超越壹遍,那么是时候将它成为自动化的。
像make那样的工具已经存在很短一段时间,首要用来帮大家化解上述难点,但也是有像样rake、grunt
以及别的类似的工具。假如您想把跟需求跟文件系统打交道的天职产生自动化,学习一门JavaScript以外的语言非常有帮衬,因为当您一味想要管理文件时,Node的异步性格会让职业变得更其辛劳。也可以有很多对准一定职责的自动化学工业具——安排,营造,代码质量担保,还应该有任何。

代码品质

纵然你早已被缺点和失误分号,或多贰个逗号这样的难点郁闷过, 你就掌握那样小的代码破绽能够浪费你有一点点日子。那正是干什么您正在周围JSHint诸有此类的工具里运营你的代码,没有错吧?它不止可配置,何况有大多主意得以将它集成到您的编辑器或构建流程中去。

好的仿照效法手册

唉,未有针对性前端开垦的手册,但MDN触手可及。好的前端开荒者会在另外搜索查询里增加mdn前缀,举例mdn javascript arrays
,制止搜到像w3schools那样的毛利性组织的剧情。

结尾

阅读方面这一个事物没办法让您形成一个学者,哪怕是变得更有经历些——在某件专门的学问上做得越来越好的无与伦比路线正是做那事。祝你好运。

本文由澳门新浦京娱乐场网站发布于新浦京娱乐场官网,转载请注明出处:JavaScript生成GUID的多种算法小结,使用指南