我的Nodejs学习总结(1)
这一将谈一些对Nodejs编程细节。1。遍历数组
对于(var i = 0,L = arr.length;i < L;i++)
编写此操作的一个优点是每次数组对象的长度减少一步,数组越长,其值就越明显。
2,判断变量的真与假
如果(一){…} / / = '' = '0',= { } = { },
if条件判断的结果是:假、真、真、真,这一结果不同于PHP的结果,不应混淆,也有必要区分它和非身份。
3和0值的非同一性判断
1如果(0 = = '0'){…} / /真的
2如果(0)…
3如果(0 = { 0 }){…
4如果(0)…
5如果(0 = NULL){…
6如果(0 =未定义){…
事实上,这里有很多奇怪的判断,我只是列出比较常见的。如果你想了解规则,请参考我的其他博客:深入分析Javascript关系操作和if语句。
4、parseInt的陷阱
var = parseInt(); / / S = '010
这个语句执行后,n值是8,不是10。虽然很多人知道这一点,但是编程不可避免地会出错,我有很深的理解,所以最好用下面的方式写,这样就不会出错了。
var = parseInt(S,10);
5。变量在使用之前必须声明。
虽然不使用声明直接使用变量并没有错,但是很容易写出这样的错误,因为解释器会把它解释成一个全局变量、容易的变量和其他全局变量名称,因此有必要在使用变量之前养成良好的声明习惯。
6。循环中有异步情况。
对于(var i = 0,L = arr.length;i < L;i++){
var语句SELECT * FROM nx_user ;
db.query(SQL函数(){(){
Sys.log(我+:+ SQL);
}); / / db.query是表查询操作是异步的
}
你会发现结果是一样的,这是我为arr.length-1.because Javascript的输出是一个单线程执行异步操作后同步内容的完整周期执行。代码中的匿名回调函数是异步回调。当函数执行时,for循环和一些下列同步操作已被执行。因为封闭原理,此功能保留了SQL的内容和我变量循环的最后一环,这样会造成错误的结果。
那我该怎么办呢有两种解决方案,一种是使用直接函数,如下所示:
对于(var i = 0,L = arr.length;i < L;i++){
var语句SELECT * FROM nx_user ;
函数(SQL,i){
db.query(SQL函数(){(){
Sys.log(我+:+ SQL);
}); / / db.query是表查询操作是异步的
})(SQL,i);
}
另一种方法是提取异步操作部分并编写单个函数,如下所示:
无功outputsql =功能(SQL,我){
db.query(SQL函数(){(){
Sys.log(我+:+ SQL);
}); / / db.query是表查询操作是异步的
}
对于(var i = 0,L = arr.length;i < L;i++){
var语句SELECT * FROM nx_user ;
outputsql(SQL,我);
}
7。在处理大量数据时,尽量避免循环嵌套。
随着循环嵌套处理时间随着数据量的增加呈指数增加,应该尽量避免。在这种情况下,如果没有更好的办法,一般的策略是通过空间、时间变化即为两级循环数据建立一个哈希映射表的。当然,具体情况应详细分析。还有一点要说的是,有些方法本身是一个循环体,如Array.sort(),应在两层循环的实现。
8。尽量避免递归调用。
递归调用的优点是代码的简单性和实现的简单性,其缺点非常重要,如下所示:
(1)函数栈的大小与递归水平呈线性增长,函数栈具有上限。当递归达到一定水平时,函数堆栈将溢出,导致程序错误。
(2)每个递归层添加额外的堆栈和堆栈操作,也就是函数调用过程中的保存站点和恢复站点。
因此,应尽量避免递归调用。
9。模块文件的范围隔离。
节点在编译文件时已经打包了Javascript模块的内容,如下所示:
(功能(出口要求,模块,__filename,__dirname){
你的Javascript文件代码
});
因此,每个模块文件是从范围隔离。所以,当你写的Nodejs模块文件,你不需要添加一层范围隔离。在下面的代码格式,只有函数调用一个额外的层将增加,这是不推荐的。
(函数(){())
…
});
10。不要混用数组和对象。
下面是错误代码的一个示例:
var;
O { 'name' } = 'liming;
数组和对象的混合会导致不可预知的错误,我的一个同事有一个非常奇怪的问题,首先查看代码:
var;
O { 'name' } = 'liming;
var = json.stringify(O);
他认为客体的名称属性将JSON字符串,结果当时我很奇怪,但我有一种预感,这是混合阵列与目标的问题。后来我发现,在ECMA规范的阵列在Ja Rule当它是进行序列化。因此,养成良好的编程习惯,数组和对象的正确使用,不要混合。
11,承诺优雅的编程
It is believed that people who have been in contact with nodeJs have experienced this experience. 当异步回调是嵌套在异步回调函数,代码显得混乱和缺乏可读性。这种困境的Nodejs是可以克服的,承诺帮助。承诺就像一个雕刻师,使您的代码优雅和美丽。希望有一个+规范,并有实施它在互联网上的几个方法。