【读书笔记】《深远浅出nodejs》第一回 Node简介

  (2)CPU密集型 ->
诀窍在于安客观调度。

关于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服务器。

 

  赖安(Ryan) Dahl 看规划大性能Web服务器的中央在于:

Array数组对象。

数组对象是一个对象的相会,里边的目标足以是分则的。数组的各级一个分子对象还来一个“下标”,用来暗示其正值数组被之职务(既然是“地点”,就也是从零起始的哇)。
数组的定义情势:

var<数组名>=newArray();

多多就概念了一个空数组。以后只要伸张数组元素,就用:

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

专注此处的方括号不是“可以略”的义,数组的下标暗示格局就是用方括号括起来。
倘使想在概念数组的时直接初阶化数据,请用:

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

比如说,varmyArray=newArray(1,4.5,’Hi’);概念了一个数组myArray,里边的素是:myArray[0]==1;myArray[1]==4.5;myArray[2]==’Hi’。
不过,倘使元素列表中惟唯一个因素,而者因素而是一个正好整数的话语,这将定义一个带有<正整数>个空元素的数组。
注意:JavaScript惟唯一维数组!万万不用由此“Array(3,4)”这看似愚蠢的方法来概念4×5的二维数组,大约用“myArray[2,3]”这好像措施来回到“二维数组”中之要素。肆意“myArray[…,3]”这类似形式之调用实践上就回去了“myArray[3]”。要用多维数组,请用就仿佛捏造法:

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

履及立即是一个一维数组,里边的各国一个元素而是一个数组。调用那多少个“二维数组”的素时:myArray[2][3]=…;

属性
length用法
:<数组对象>.length;再次来到:数组的长短,即数组里有几乎差不多单要素。它便是数组里起头一个要素的下标加一。以凡,想扩张一个素,只必要:myArray[myArray.length]=…。
方式
join()用法
:<数组对象>.join(<离开符>);再次来到一个字符串,该字符串把数组中的逐一要素串起来,用<离开符>置于元素以及素中。这个情势不影响数组原先的始末。

reverse()用法
:<数组对象>.reverse();使数组中的素次序反过来。假若有关数组[1,2,3]使这些措施,它以如数组变为:[3,2,1]。

slice()用法
:<数组对象>.slice(<始>[,<终>]);重返一个反复组,该数组是原数组的子集,始于<始>,究竟<终>。如若不吃出<终>,则子集不停歇取到原数组的利落。
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 重返 1/2 的平方根。
SQRT2 再次来到 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
年,而且好切确到皮秒数(1/1000
秒)。正在里面,日期对象是一个平头,它是自 1970 年 1 月 1
日零时刚刚起始计较到日期对象所负的日子的皮秒数。假诺所指日期比 1970
年早,则它是一个负数。整个日期时,假若不依靠按时区,都应用“UTC”(天下时)时区,它同“GMT”(格林(格林)威治时间)正于数值达到是同的。

概念一个日子对象: 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()再次来到/配置年份,用四位数暗示。假如运用“x.set[UTC]FullYear(99)”,则年度被设定为
0099 年。
g/set[UTC]Year()再次来到/配置年份,用有限员数暗示。设定的时扫瞄器自动与“19”扫尾,故使“x.set[UTC]Year(00)”把年度设定也
1900 年。
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]米尔(Mill)iseconds()重回/配置阿秒数。
g/set提姆(Tim)e() 重返/配置时,该时空纵是日期对象的里边搞定格局:从 1970 年
1 月 1
日零时正巧开计较到日期对象所据的日期的毫秒数。假使要使有日期对象所依靠的日子推
1 时辰,就用:“x.set提姆(Tim)e(x.get提姆(Tim)e() + 60 * 60 * 1000);”(一小时 60
分,一分 60 秒,一秒 1000 毫秒)。
get提姆ezoneOffset()前来日期对象下的时区与格林威治时间所不同的分钟数。正在格林威治东方的城区,该值为因,比喻:中国时区(GMT+0800)重返“-480”。
toString()再次来到一个字符串,描写日期对象所指的日期。这个字符串的格式相同于:“Fri Jul
21 15:43:46 UTC+0800 2000”。
toLocaleString()再次来到一个字符串,描写日期对象所倚的日子,用外地时暗示格式。如:“2000-07-21
15:43:46”。 toGMTString() 重回一个字符串,描写日期对象所负的日子,用 GMT
格式。 toUTCString() 再次回到一个字符串,描写日期对象所信赖的日子,用 UTC
格式。
parse()用法:Date.parse(<日期对象>);重临该日期对象的内标明格局。

大局对象

全局对象没现形,它好说凡是虚构出来的,大旨正在于管全局函数“对象化”。正在
Microsoft JScript 语言参登科,它称作“Global
对象”,不过援用它的计及性从不要“Global.xxx”(何况多么做会败坏),而直接用“xxx”。

  (2)异步I/O,在Node中,绝大多数的操作都归因于异步的法子开展调用。

属性

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

方法
charAt()用法:<字符串对象>.charAt(<地方>);重回该字符串位于第<地方>位的么字符。注意:字符串中的一个字符是第0个之,第二个才是第1员的,开始一个字符是第length-1位之。

charCodeAt()用法:<字符串对象>.charCodeAt(<地点>);再次回到该字符串位于第<地点>位之么字符的ASCII码。
fromCharCode()用法:String.fromCharCode(a,b,c…);重回一个字符串,该字符串每逐个个字符的ASCII码由a,b,c…等来定。
indexOf()用法:<字符串对象>.indexOf(<另外一个字符串对象>[,<伊始地方>]);该措施由<字符串对象>中查找<另外一个字符串对象>(假使为出<开端地点>就无所谓从前的职),虽然找到了,就回去其的岗位,没有找到就归“-1”。整个的“地方”都是起零起首的。
lastIndexOf()用法:<字符串对象>.lastIndexOf(<此外一个字符串对象>[,<着手地点>]);跟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();重返把原字符串整个小写字母都变成大写的字符串。

4.Node的使用场景

属性

NaN 一早便说罢了。
方法
eval() 把括号内的字符串看成标准语句或许标明式来运作。
isFinite() 要是括号内之数字是“无穷”的(介于 Number.MIN_VALUE 和
Number.MAX_VALUE 之间)就回去 true;不然重回 false。
isNaN() 假使括号内的价值是“NaN”则回 true 不然再次来到 false。
parseInt()再次回到把括号内的情转换成整数未来的值。假使括号内是字符串,则字符串扫尾的数字部份被转换成整数,假使因字母扫尾,则赶回“NaN”。
parseFloat()重返把括号内之字符串转换成为浮点数将来的价值,字符串扫尾的数字部份被转换成浮点数,若是因字母扫尾,则赶回“NaN”。
toString()用法:<对象>.toString();把对象转换成为字符串。即便正在括号中指定一个数值,则变过程遭到整数值转换成为特定进制。
escape() 再次来到括号中的字符串颠末编码后底初字符串。该编码运用于
URL,也不怕是把空格写成“%20”这类格式。“+”不给编码,倘若一旦“+”也叫编码,请用:escape(‘…’,
1)。
unescape() 是 escape() 的反过程。解编括号中字符串成为一般字符串。

函数函数的定义  所谓“函数”,是发再次回到值的对象或对象的章程。
函数的色
科普的函数有:机关函数,如
Array(),能自行一个数组;全局函数,即全局对象里的艺术;自概念函数;等等。
从今定义函数 

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

斯中,用在 function
将来与函数扫尾的大括号是不克不及省去的,尽管全函数惟唯一句子。 
函数名为与变量名有同样的起名规矩,也就是是单含有字母数字下划线、字母排头、不克不及与保留字重复等。 
参数凑无关首要,但括号就必然要爆发。

参数是函数内部向函数内部传送音讯之桥梁,比喻,想叫一个函数再次来到 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
一个频组,反映外部程序调用函数时指定的参数。用法:直接正在函数内部调用“arguments”。
 

    (2)非阻塞I/O

  *为什么是JavaScript?

  (1)I/O密集型 ->
Node面向网络都擅长并行I/O,能够行得通地公司从重新多的硬件资源,从而提供更多好之服务。(紧要优势在于Node利用时间循环的拍卖能力,而休是启动每一个线程为各种一个央服务,资源占用极少。)

2. Node的缘起:

  (5)跨平台

    (what? && why?)

    (2)符合事件驱动

  赖安 Dahl 选拔采用JavaScript作为该服务器的兑现语言,起名为Node。

    (1)无法运用基本上核CPU

  (1)保留前端浏览器JavaScript中熟识的接口,没有改写语言本身的此外特性,如故基于功效域链和原型链。

  *单线程的欠缺:

  (3)事件以及回调函数。事件之编程格局有轻量级,松耦合,只关心事物点的优势。

    (3)没有历史包袱

  (4)单线程。不用像多线程编程这样处处以全状态的一起问题,这里没死锁的是,也未尝县城上下文沟通所带的性能上的开支。

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

    (1)高性能

    (3)大量总括占用CPU导致不能持续调整用异步I/O ->
已选择child_process解决

    (2)错误会挑起一切应用退出,应用的健壮性值得考验。

    (1)事件驱动

  (3)分布式应用

3. Node的特点

发表评论

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

网站地图xml地图