【读书笔记】《深入浅出nodejs》第1章 Node简介起名

1. Node的官方网站:
http://nodejs.org

 

2. Node的缘起:

至于JavaScipt对象的基本知识

JavaScript是运用“对象化编程”的,又叫“面向对象编制程序”的。所谓“对象化编制程序”,意义是把JavaScript能涉及的世界划分成种种对象,对象前面还总是划分对象直至卓殊事无巨细甘休,整个的编制程序都是目的为着眼点,基于对象。名叫对象,小到二个变量,大到网页文书档案、窗口乃至显示器,都以指标。那里将“面向对象”报告JavaScript的周转环境。

指标的基本知识

对象是能够从JavaScript“势力范围”划分出来的一小块,能够是一段文字、一张图片、八个表单(Form)等等。各样对象备它自己的天性、方式和事件。对象的属性是展现该对象有些特定的本性的,比如:字符串的尺寸、图象的长度宽度、文字框(Textbox)里的文字等等;对象的章程能关于该目的做一些任务,比喻,表单的“提交”(Submit),窗口的“转动”(Scrolling)等等;而目的的事件就能够对应发作正在对象上的天职,比喻提交表单发作表单的“提交事件”,点击连接发作的“点击事件”。不是任何的目的都有以上三个性质,有个别尚未事件,有个别惟独属性。援用对象的任一“性格”用“<对象名>.<性格名>”那类情势。

基本目的

此时我们要复习以上学过的内容了——把有个别数据典范用对象的角度从头深造一下。

Number“数字”对象。那几个目的用得很少,我就一遍也并未见过。不过属于“Number”的对象,也便是“变量”就多了。

属性
MAX_VALUE用法:Number.MAX_VALUE;返回“最大值”。
MIN_VALUE用法:Number.MIN_VALUE;返回“最小值”。
NaN用法:Number.NaN只怕NaN;重返“NaN”。“NaN”(不是数值)正在很已经先容过了。
NEGATIVE_INFINITY用法:Number.NEGATIVE_INFINITY;重返:负无穷大,比“最小值”还小的值。
POSITIVE_INFINITY用法:Number.POSITIVE_INFINITY;再次来到:正无穷大,比“最大值”还大的值。

toString()用法:<数值变量>.toString();再次回到:字符串格局的数值。如:若a==123;则a.toString()==’123’。

String字符串对象,声美素佳儿个字符串对象最乌烟瘴气、赶快、有用、平日的办法就是直接赋值。

  Ryan Dahl 打算规划贰个高质量的Web服务器。

属性

length用法:<字符串对象>.length;重回该字符串的长短。

方法
charAt()用法:<字符串对象>.charAt(<地点>);重回该字符串位于第<地方>位的单个字符。注意:字符串中的1个字符是第0位的,第一个才是第四个人的,初叶多少个字符是第length-一个人的。

charCodeAt()用法:<字符串对象>.charCodeAt(<地方>);重临该字符串位于第<地点>位的单个字符的ASCII码。
fromCharCode()用法:String.fromCharCode(a,b,c…);重返3个字符串,该字符串每每种个字符的ASCII码由a,b,c…等来自然。
indexOf()用法:<字符串对象>.indexOf(<此外1个字符串对象>[,<早先地点>]);该办法从<字符串对象>中查找<其余1个字符串对象>(假如给出<开首地方>就无所谓之前的职位),假设找到了,就赶回它的地点,没有找到就回到“-1”。整个的“地点”都以从零早先的。
lastIndexOf()用法:<字符串对象>.lastIndexOf(<此外1个字符串对象>[,<开端地点>]);跟indexOf()相似,不过是从后面起首找。

split()用法:<字符串对象>.split(<离开符字符>);重临四个数组,该数组是从<字符串对象>中分别开来的,<离开符字符>决定了分别的地点,它本人不会蕴藏正在所重临的数组中。比喻:’1&2&345&678′.split(‘&’)重返数组:1,2,345,678。关于数组,大家等一下就清楚。

substring()用法:<字符串对象>.substring(<始>[,<终>]);再次回到原字符串的子字符串,该字符串是原字符串从<始>地方到<终>地点的前壹位置的一段。<终>-<始>=再次来到字符串的长度(length)。假若没有点名<终>大概钦定得逾越字符串长度,则子字符串从<始>地点不停取到原字符串尾。如若所内定的地点不克不及重回字符串,则赶回空字符串。
span style=”color: #800080;”>
substr()用法:<字符串对象>.substr(<始>[,<长>]);重回原字符串的子字符串,该字符串是原字符串从<始>地方上马,长度为<长>的一段。假若没有点名<长>或然钦定得逾越字符串长度,则子字符串从<始>地方不停取到原字符串尾。借使所钦点的地方不克不及再次回到字符串,则赶回空字符串。

toLowerCase()用法:<字符串对象>.toLowerCase();重临把原字符串整个大写字母都改成小写的字符串。
toUpperCase()用法:<字符串对象>.toUpperCase();再次来到把原字符串整个小写字母都改为大写的字符串。

  赖安 Dahl 认为规划高质量Web服务器的要领在于:

Array数组对象。

数组对象是二个对象的联谊,里边的靶子能够是分别典范的。数组的每3个分子对象都有二个“下标”,用来暗示它正在数组中的地点(既然是“地方”,就也是从零起首的哇)。
数组的定义格局:

var<数组名>=newArray();

多么就概念了1个空数组。未来要扩充数组成分,就用:

<数组名>[<下标>]=…;

留神此处的方括号不是“可以不难”的含义,数组的下标暗示方式就是用方括号括起来。
假若想正在概念数组的小时直接先导化数据,请用:

var<数组名>=newArray(<元素1>,<元素2>,<元素3>…);

比如,varmyArray=newArray(1,4.5,’Hi’);概念了二个数组myArray,里边的因素是:myArray[0]==1;myArray[1]==4.5;myArray[2]==’Hi’。
不过,如果成分列表中惟唯三个成分,而那几个因素又是一个正整数的话,那将概念3个富含<正整数>个空成分的数组。
注意:JavaScript惟唯一维数组!万万毫无用“Array(3,4)”那类鸠拙的办法来概念4×5的二维数组,大概用“myArray[2,3]”这类形式来回到“二维数组”中的成分。肆意“myArray[…,3]”这类方式的调用实践上只回去了“myArray[3]”。要利用多维数组,请用那类捏造法:

varmyArray=newArray(newArray(),newArray(),newArray(),…);

履行上那是3个一维数组,里边的每2个成分又是二个数组。调用这么些“二维数组”的因素时:myArray[2][3]=…;

属性
length用法
:<数组对象>.length;重回:数组的长度,即数组里有几多少个要素。它就是数组里初始2个要素的下标加一。以是,想增添3个成分,只要求:myArray[myArray.length]=…。
方式
join()用法
:<数组对象>.join(<离开符>);重返二个字符串,该字符串把数组中的各类要素串起来,用<离开符>置于元素与成分之间。那么些艺术不影响数组原先的内容。

reverse()用法
:<数组对象>.reverse();使数组中的成分次序反过来。要是有关数组[1,2,3]动用这一个艺术,它将使数组变为:[3,2,1]。

slice()用法
:<数组对象>.slice(<始>[,<终>]);重返1个数组,该数组是原数组的子集,始于<始>,毕竟<终>。假使不给出<终>,则子集不停取到原数组的截至。
sort()用法:<数组对象>.sort([<格局函数>]);使数组中的成分依照一定的先后分列。如若不钦定<情势函数>,则按字母次序分列。正在这类环境下,80是比9排得前的。假若钦点<格局函数>,则按<方式函数>所钦命的排序形式排序。<格局函数>有点难奉告,此处只将部分适用的<格局函数>先容给大王。

按升序分列数字: functionsortMethod(a,b){ returna-b; }
myArray.sort(sortMethod);

按降序分列数字:把前面包车型的士“a-b”该成“b-a”。 非亲非故函数,请看前面。

Math“数学”对象,提供关于数据的数学计较。前面所提到的品质和办法,再也不详细表达“用法”,巨匠正在选择的小运记着用“Math.<名>”那类格式。

属性

E 前平时数 e (2.718281828…)。
LN2 重临 2 的当然关于数 (ln 2)。
LN10 再次来到 10 的本来关于数 (ln 10)。
LOG2E 再次来到以 2 为低的 e 的关于数 (log2e)。
LOG10E 重返以 10 为低的 e 的关于数 (log10e)。
PI 返回π(3.1415926535…)。
SQRT1_2 重回 百分之五十 的平方根。
SQ奇骏T2 重返 2 的平方根。

方法

abs(x) 重返 x 的相关于值。
acos(x) 再次来到 x 的反余弦值(余弦值就是 x 的角度),用弧度暗示。
asin(x) 重返 x 的归正弦值。 atan(x) 再次来到 x 的归正切值。
atan2(x, y) 重返覆平面内点(x, y)关于应的双数的幅角,用弧度暗示,其值正在
-π 到 π 之间。
ceil(x) 再次回到大于正是 x 的相当小整数。
cos(x) 返回 x 的余弦。
exp(x) 返回 e 的 x 次幂 (ex)。
floor(x) 重回小于正是 x 的最大整数。
log(x) 重返 x 的自然关于数 (ln x)。
max(a, b) 再次回到 a, b 中较大的数。
min(a, b) 再次来到 a, b 中较小的数。
pow(n, m) 返回 n 的 m 次幂 (nm)。
random() 重回大于 0 小于 1 的三个随机数。
round(x) 重回 x 四舍五入后的值。
sin(x) 返回 x 的正弦。
sqrt(x) 再次回到 x 的平方根。
tan(x) 返回 x 的正切。

Date 日期对象。那一个指标能够储存肆意一个日子,从 0001 年到 9999
年,而且能够切确到纳秒数(百分之十00
秒)。正在里面,日期对象是1个平头,它是从 1968 年 1 月 1日零时正初步计较到日期对象所指的日期的皮秒数。假若所指日期比 一九六九年早,则它是三个负数。整个日期时间,要是不指按时区,都应用“UTC”(天下时)时区,它与“维生霉素T”(格林威治时间)正在数值上是千篇一律的。

概念贰个日期对象: var d = new Date; 那么些格局使 d
成为日期对象,而且早已有起初值:现在时间。假设要自定初叶值,能够用:
var d = new Date(99, 10, 1);
//99 年 10 月 1 日 var d = new Date(‘Oct 1, 1999’); //99 年 10 月 1 日
等等情势。最佳的办法便是用前边先容的“格局”来严俊的概念时间。

方法

正如有为数不少“g/set[UTC]XXX”多么的格局,它暗示既有“getXXX”形式,又有“setXXX”方式。“get”是收获有个别数值,而“set”是设定有个别数值。假诺带有“UTC”字母,则暗示获得/设定的数值是基于
UTC 时间的,没有则暗示基于内地时间或然扫瞄期私下认可时间的。
如无表明,方式的运用格式为:“<对象>.<格局>”,下同。
g/set[UTC]FullYear()
再次回到/配置年份,用3个人数暗示。若是使用“x.set[UTC]FullYear(99)”,则年度被设定为
0099 年。
g/set[UTC]Year()再次回到/配置年份,用两位数暗示。设定的年月扫瞄器自动赋予“19”扫尾,故运用“x.set[UTC]Year(00)”把年度设定为
一九〇五 年。
g/set[UTC]Month()再次来到/配置月份。 g/set[UTC]Date()重返/配置日期。
g/set[UTC]Day()重回/配置礼拜,0 暗示周日。
g/set[UTC]Hours()再次来到/配置时辰数,24小时制。
g/set[UTC]Minutes()再次回到/配置分钟数。
g/set[UTC]Seconds()再次回到/配置分钟数。
g/set[UTC]Milliseconds()重回/配置微秒数。
g/setTime() 再次回到/配置时间,该时间就是日期对象的在那之中解决形式:从 一九七零 年
1 月 17日零时正初阶计较到日期对象所指的日期的纳秒数。借使要使某日期对象所指的时日推移
1 时辰,就用:“x.setTime(x.getTime() + 60 * 60 * 1000);”(一小时 60
分,一分 60 秒,一秒 1000 毫秒)。
getTimezoneOffset()
前来日期对象采取的时区与Green威治时间所差的秒钟数。正在Green威治东方的梅江区,该值为负,比喻:中中原人民共和国时区(GMT+0800)重返“-480”。
toString()
再次来到1个字符串,描写日期对象所指的日期。那几个字符串的格式相同于:“Fri Jul
21 15:43:46 UTC+0800 3000”。
toLocaleString()
重回二个字符串,描写日期对象所指的日期,用外市时间暗示格式。如:“两千-07-21
15:43:46”。 to克林霉素TString() 重回二个字符串,描写日期对象所指的日子,用 GMT
格式。 toUTCString() 再次来到二个字符串,描写日期对象所指的日期,用 UTC
格式。
parse()
用法:Date.parse(<日期对象>);再次来到该日期对象的内部标明方式。

大局对象

大局对象从不现形,它能够说是虚拟出来的,大旨正在于把全局函数“对象化”。正在
Microsoft JScript 语言参登科,它称作“Global
对象”,可是援用它的方法和特性一贯不用“Global.xxx”(何况多么做会败坏),而直接用“xxx”。

    (1)事件驱动

属性

NaN 一早就说过了。
方法
eval() 把括号内的字符串看成标准语句可能标明式来运作。
isFinite() 假如括号内的数字是“无穷”的(介于 Number.MIN_VALUE 和
Number.MAX_VALUE 之间)就赶回 true;否则再次来到 false。
isNaN() 要是括号内的值是“NaN”则赶回 true 不然再次来到 false。
parseInt()
重回把括号内的始末转换来整数未来的值。如若括号内是字符串,则字符串扫尾的数字部份被转换来整数,假使以字母扫尾,则赶回“NaN”。
parseFloat()
重返把括号内的字符串转换到浮点数未来的值,字符串扫尾的数字部份被转换到浮点数,如若以字母扫尾,则赶回“NaN”。
toString()
用法:<对象>.toString();把对象转换成字符串。假如正在括号中钦点三个数值,则转移进程中一切数值转换来特定进制。
escape() 重返括号中的字符串颠末编码后的新字符串。该编码运用于
U凯雷德L,相当于把空格写成“%20”那类格式。“+”不被编码,如果要“+”也被编码,请用:escape(‘…’,
1)。
unescape() 是 escape() 的反进度。解编括号中字符串成为一般字符串。

函数函数的概念  所谓“函数”,是有再次来到值的目的大概对象的章程。
函数的种类
周边的函数有:机关函数,如
Array(),能自行八个数组;全局函数,即全局对象里的主意;自概念函数;等等。
自定义函数 

概念函数用如下语句:
function 函数名([参数集]) {    
…    
[return[ <值>];]
    … } 

在那之中,用正在 function
现在和函数扫尾的大括号是不克不及省去的,尽管全数函数惟唯一句。 
函数名与变量名有同样的起名规矩,约等于只含有字母数字下划线、字母排头、不克不及与保留字重复等。 
参数集非亲非故首要,但括号就一定要有。

参数是函数内部向函数内部传送消息的桥梁,比喻,想叫3个函数重临 3
的立方,你就要让函数知道“3”那个数值,那时分辰就要有贰个变量来收取数值,那类变量叫做参数。 
参数集是三个也许多个用逗号离开开来的参数的聚众,如:a, b, c。

函数的里边有一起码行语句,这一个语句实在不会立刻实施,而只当有别的程序调用它时才实施。那个语句中山大学约包括“return”语句。正在履行一个函数的年月,境遇return
语句,函数立时防止实施,并重回到调用它的先后中。要是“return”后含有<值>,则插手函数的还要重回该值。

正在函数的在这之中,参数能够直接看成变量来利用,并得以用 var
语句来新建一些变量,可是这个变量都不克不及被函数内部的经过调用。要使函数内部的消息能被里面调用,要末使用“return”重回值,要末使用全局变量。

大局变量 正在 Script
的“根部”(非函数内部)的“var”语句所定义的变量正是全局变量,它能正在整个进度的人身自由地点被调用、修改。

例如:
function addAll(a, b, c) {
    return a + b + c;
} var total = addAll(3, 4, 5); 

本条例子制造了三个叫“addAll”的函数,它有 3 个参数:a, b,
c,功用是回来四个数相加的法力。正在函数内部,把持“var total = addAll(3,
4, 5);”接收函数的重回值。 
越来越多的时候,函数是没有重回值的,那类函数正在某些稍稍严酷的言语中是名为“进程”的,比喻
Basic 类语言的“Sub”、Pascal 语言的“procedure”。 

属性
arguments
2个数组,反映外部程序调用函数时钦定的参数。用法:直接正在函数内部调用“arguments”。
 

    (2)非阻塞I/O

    (what? && why?)

  Ryan Dahl 选用选取JavaScript作为该服务器的贯彻语言,起名为Node。

  *怎么是JavaScript?

    (1)高性能

    (2)符合事件驱动

    (3)没有历史包袱

3. Node的特点

  (1)保留前端浏览器JavaScript中明白的接口,没有改写语言本人的别的性格,如故基于效能域链和原型链。

  (2)异步I/O,在Node中,绝当先八分之四的操作都是异步的法门进行调用。

  (3)事件与回调函数。事件的编程形式有所轻量级,松耦合,只关注事物点的优势。

  (4)单线程。不用像八线程编制程序那样到处在意状态的联合署名难点,那里没有死锁的存在,也远非县城上下文沟通所带来的属性上的耗费。

  *单线程的缺陷:

    (1)不或者利用多核CPU

    (2)错误会引起整个应用退出,应用的健壮性值得考验。

    (3)多量测算占用CPU导致不恐怕继续调用异步I/O ->
已利用child_process解决

  (5)跨平台

4.Node的运用场景

  (1)I/O密集型 ->
Node面向网络且擅长并行I/O,能够使得地公司起越多的硬件能源,从而提供更加多好的服务。(首要优势在于Node利用时间循环的拍卖能力,而不是开发银行每2个线程为每一个呼吁服务,能源占用极少。)

  (2)CPU密集型 ->
诀窍在于怎么样合理调度。

  (3)分布式应用

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图