Javascript程序员应该知道的45种实用技能

你知道,Javascript是世界上第一个编程语言,是网络语言,是一个移动应用(移动混合应用程序)的混合语言(如PhoneGap或Appcelerator),是一种服务器端语言(如Nodejs或wakanda),和许多其他的实现。同时,它也是很多新手的启发性的语言,因为它不仅可以显示在浏览器的一个简单的报警信息,也可以控制机器人(使用nodebot或nodruino)。开发商掌握Javascript和能写代码和性能高效的代码已成为人才市场的狩猎对象。
需要注意的是,在这篇文章中的代码片段是在谷歌浏览器的最新测试的重要(30版),它采用V8 Javascript引擎(V8 3.20.17.15)。

1 u2013不要忘记使用var关键字,当第一个变量赋值给一个变量。
将一个未定义的变量赋给变量会导致创建一个全局变量。
2 -使用而不是。
(或=!=)运算符将在需要时自动执行类型转换。操作不执行任何转换,它将比较值和类型,速度也被认为优于。
复制代码代码如下所示:
{ 10 } = 10 /是false
{ 10 } = 10 /是真的
10= 10 /是真的
10= 10 / false是false
{ = 0 /是真的
{ = 0 = / false是false
假真但是真是false是错误的。
false是false

3 u2013使用闭包实现私有变量
复制代码代码如下所示:
功能人(姓名,年龄){
this.getname =函数(){ return的名字;};
this.setname =功能(新名称){姓名}的名称;
this.getage =函数(){ return年龄;};
this.setage =功能(新){年龄=新时代;};

在构造函数属性中未初始化
VaR的职业;
this.getoccupation =函数(){ return职业;};
this.setoccupation =功能(newocc){职业=
newocc;};
}

4 -在语句的结尾使用分号
在语句结束时使用分号是一种很好的做法。如果你忘了给你写信,你就不会被警告,因为在大多数情况下,Javascript解释器会给你添加分号。
5 u2013创建对象的构造函数
复制代码代码如下:功能人(firstName、lastName){
this.firstname =名;
this.lastname =姓;
}

Var Saad =新人(萨阿德)
6 u2013小心类,实例,和构造函数
复制代码如下:var arr = {
型ARR; / / 返回对象
ARR是阵列 / /真的
/ / { }(arr.constructor);
7 u2013创造自我调用函数(自调用函数)
这是通常被称为自喊自调用(匿名函数)或即时调用函数表达式(生活立即调用函数表达式)。这是一个函数,创建后立即自动执行,通常如下:
复制代码代码如下所示:
(函数(){())
一些自动执行的私有代码。
});
(函数(a,b){)
var结果;
返回结果;
})(10,20)

8 -从数组中获取一个随机项。
复制代码如下:var项目= { 12, 548,A,2, 5478,'foo ',8852,'doe ',2145, 119 };

无功randomitem =项目{ math.floor(Math.random()*项目。长度)};{代码}
9 -在特定范围内获得一个随机数
当您想要生成测试数据时,这个代码段非常有用,例如在最小最大值之间的随机工资值。
{代码} var x = math.floor(Math.random()*(最大-最小+ 1))+ min;
10 -生成0到最大值之间的数字数组。
复制代码如下:var numbersarray = { },max = 100;

对于(var i = 1;numbersarray.push(i++)<最大;); / /数= { 0、1、2、3…100 }
11 -生成一个随机数字字母串。
复制代码代码如下:功能generaterandomalphanum(LEN){
无功rdmstring = ;
(为;rdmstring.length < len;rdmstring = Math.random(ToString)(36),Substr(2));
返回rdmstring.substr(0,Len);
}
12 u2013打乱数字数组
复制代码如下:var数字= { 5, 458, 120,- 215, 228, 400,122205,- 85411 };
numbers.sort数=((){ return函数Math.random()0.5 });
数组号将等于例如,{ 120, 5, 228,400, 458,- 215,- 85411, 122205 }。
13弦的配平功能
在# java,C,PHP和其他语言有一种古典的装饰功能,它是用来删除字符串中的空格字符,但不在Javascript中,所以我们需要在字符串对象添加此功能。
复制代码代码如下所示:
string.prototype.trim =功能({ return)this.replace( / ^ + | + $ /克);}; / /删除字符串和字符串的空间,不包括内部空间
14 u2013添加(添加)到另一个数组的数组
复制代码如下:var array1 = { 12,foo

VaR array2 = {无名氏
Array.prototype.push.apply(array1,array2);
array1将等于 / { 12,foo
事实上,连接 / /可以直接实现连接两个数组,但它是一个新的数组返回值。这里是直接改变2

15 -将参数对象转换为数组
复制代码代码如下:var argarray = array.prototype.slice.call(参数);
参数对象是一个类数组对象,但不是一个真正的数组。
16 -验证参数是否是一个数字(数字)。
复制代码代码如下:功能isnumber(N){
返回!IsNaN(parseFloat(n))系统(N);
}
17 -验证参数是数组。
复制代码代码如下:功能ISArray(obj){
返回object.prototype.tostring.call(obj)={ }对象数组;
}
注意:如果toString()方法被重写(重写),你不能使用这种技术获得期望的结果。或者你可以使用:
复制代码代码如下所示:
Array.isArray(obj); / /这是一个阵列的新方法
如果你不使用多个帧,也可以使用实例方法。但如果你有多个的情况下,你会得到错误的结果。
The copy code code is as follows: VAR myFrame = document.createElement ('iframe');
document.body.appendchild(myFrame.);

VaR MyArray =窗口。帧{窗口。帧。length-1 }。阵列;
var arr =新MyArray(A,B,10); / / {A,B,10 }

不工作 / /是正确MyArray失去构造函数
不在帧/构造函数之间共享
数组是数组; / /假
18 -获取数组中的最大值或最小值。
复制代码如下:var数字= { 5, 458, 120,- 215, 228, 400,122205,- 85411 };
无功maxinnumbers = math.max.apply(数学、数字);
无功mininnumbers = math.min.apply(数学、数字);
/ /注:这里使用的技术function.prototype.apply传递参数的方法
19 -清空数组
复制代码代码如下:var MyArray = { 12, 222, 1000 };
myarray.length = 0; / / MyArray将等于。
20 -不要使用删除来删除数组中的项。

使用剪接而不是使用删除来删除数组中的项。删除的使用仅使用未定义替换原来的项,而不是从数组中删除。

不要用这种方式:
复制代码如下:var项目= { 12, 548,A,2, 5478,'foo ',8852,'doe ',2154, 119 };
items.length; / /返回11
删除项目{ 3 };返回true
items.length; / /返回11
项目将等于 12, 548,A,未定义的* 1, 5478,富,8852,未定义的* 1,DOE,2154, 119 }。
和使用:
复制代码如下:var项目= { 12, 548,A,2, 5478,'foo ',8852,'doe ',2154, 119 };
items.length; / /返回11
items.splice(3,1);
items.length; / /返回10
项目将等于 12, 548,A,5478,富,8852,未定义的* 1,DOE,2154, 119 }。
删除方法应用于删除对象的属性。
21 -使用长度截断数组

与上面的清空数组类似,我们使用长度属性截断数组。
复制代码如下:var MyArray = { 12, 222, 1000,124, 98, 10 };
myarray.length = 4; / / MyArray将等于{ 12, 222, 1000,124 }。
此外,如果将数组的长度设置为大于当前值的值,则该数组的长度将被更改,这将增加新未定义的补数。数组的长度不是只读属性。
复制代码如下:myarray.length = 10; / /新的数组的长度是10
myarray.length MyArray { 1 }; / /未定义
22 -使用逻辑和或判断条件
复制代码代码如下所示:
var = 10;
foo = = 10); / / doSomething(相当于如果(foo = = 10)(做);
foo = = 5); / / | | doSomething(相当于如果(Foo!= 5)(做);
逻辑也可用于设置函数参数的默认值。
复制代码代码如下所示:
函数doSomething(arg1){
arg1 = arg1 | | 10; / /如果arg1是没有设置,默认arg1将被设置为10
}
23 u2013使用地图()来遍历一个物品阵列的方法
复制代码如下:var平方= { }(1、2、3、4。地图功能(Val){ {)
返回空值;
});
正方形将等于 { 1, 4, 9,16 }。
24 -四众议院五成一个数字,保持n位十进制。
复制代码代码如下:var = 2.443242342;
Num = num.tofixed(4); / /数将等于2.4432
25 -浮点数问题
复制代码如下:0.1 + 0.2 = 0.3 / false是false
9007199254740992 + 1 等于9007199254740992
9007199254740992 + 2 等于9007199254740994
那是为什么0.1 + 0.2等于0.3000000000000000.you必须知道所有Javascript号在64位二进制浮点数,符合IEEE 754标准。更多的介绍,你可以阅读这个博客,你可以使用固定的()和精密()方法来解决这个问题。
26 u2013检查属性,当使用在遍历一个对象的内部属性

下面的代码片段可以避免在遍历对象属性时访问原型属性。
复制代码代码如下所示:
对于(对象中的var名称){
如果(object.hasownproperty(名字)){
一些有名字的事情
}
}
27 -逗号运算符
复制代码代码如下所示:
var a=0;
var(=,++,99);
console.log(一); / /将等于1
console.log(B); / / B等于99
28 u2013缓存需要计算和查询(计算或查询)变量

对于jQuery选择器,我们最好缓存这些DOM元素。
复制代码代码如下:var navright = document.queryselector(' #正确);
无功navleft = document.queryselector(' #左);
无功navup = document.queryselector(' #);
无功navdown = document.queryselector(' # down);
29 u2013验证参数在调用系统的()
复制代码如下:需(0 / 0); / /假
有限(foo); / /假
系统(10); / /真的
有限(10); / /真的
需(undifined); / /假
(有限); / /假
有限(空); / /真的!!!
30 u2013负指数(负指标)在避免阵列
复制代码如下:var numbersarray = { 12345 };
var = numbersarray.indexof(foo); / /等于1
numbersarray.splice(,2); / /将返回{ 5 }
确保调用返回的参数是不负。

31 u2013序列化和反序列化(序列化和反序列化)基于JSON
复制代码代码如下:var人= {姓名:'saad,年龄:26,部门:{编号:15,名称:RD} };
无功stringfromperson = json.stringify(人);
stringfromperson等于 / * {名字:萨阿德
无功personfromstring = JSON.parse(stringfromperson);
personfromstring等于个人目标 / * * /
32 u2013避免使用eval()和函数的构造
使用eval和函数的构造函数是一个非常昂贵的操作,因为他们每次调用脚本引擎的源代码转换成可执行的代码。
复制代码代码如下:var func1 =新的功能(功能码);
VaR func2 = eval(功能码);
33 -避免使用()
使用()插入全局变量。因此,相同名称的变量将被覆盖并造成不必要的麻烦。
34 -避免在遍历数组时使用
避免使用这种方式:
复制代码如下:var总和= 0;
对于(VAR我arraynumbers){
总和= arraynumbers {我};
}
更好的办法是:
复制代码如下:var总和= 0;
对于(var i = 0,len = arraynumbers.length;我< len;i++){
总和= arraynumbers {我};
}
额外的好处是,我和莱恩的两个变量的值只执行一次,而且比下面的效率更高。
复制代码如下:对(var i = 0;i < arraynumbers.length;i++)
为什么因为arraynumbers.length计算每次循环。
35 u2013当调用setTimeout()和setInterval(),功能是通过,而不是字符串。
如果你通过setTimeout或setInterval()()的字符串,该字符串将被解析为评价,这是非常耗时的。
不要使用:
复制代码代码如下所示:
('dosomethingperiodically setInterval()',1000);
('dosomethingafterfiveseconds setTimeout()',5000)
和使用:
复制代码代码如下所示:
setInterval(dosomethingperiodically,1000);
setTimeout(dosomethingafterfiveseconds,5000);
36 -使用开关 case语句,而不是一个长字符串如果
当判断超过2时,使用开关/案例更高效,更优雅(更容易组织代码),但在判断超过10时不要使用开关/案例。
37 u2013使用开关/案例确定值的范围
在这种情况下,使用开关/案例来确定值的范围是合理的。
复制代码代码如下所示:
功能getcategory(年龄){
var类别;
开关(true){
案例isnan(年龄):
类别不是一个年龄;
打破;
案例(年龄= 50):
类别;
打破;
案例(20岁):
类别=宝贝;
打破;
违约:
类别=年轻;
打破;
};
返回类型;
}
getcategory(5); / /会回来的宝贝
对于一般的/数值判断范围,如果更合适的话,开关/案例更适合确定确定的值。
38 u2013指定创建的对象的原型对象
可以编写一个函数来创建具有指定参数的对象作为原型。
复制代码代码如下:函数克隆(对象){
功能(oneshotconstructor){ };
oneshotconstructor原型为对象;
返回新的oneshotconstructor();
}
克隆(数组.原型);
39 -一个HTML转义函数
复制代码代码如下:功能escapehtml(文本){
变量替换=>、、};
返回text.replace( / { <>} / G函数(字符){
返回替换{字符};
});
}
40 -避免在循环中使用尝试catch
在运行时,每次执行catch子句时,捕获的对象将被分配给一个变量,而在尝试catch最后的结构中,它将在任何时候构建。

避免这样的写作:
复制代码代码如下:var对象= { 'foo ','bar},我;
为(i = 0,len = object.length;我< len;i++){
{试
抛出异常的东西
}
catch(e){
处理/异常
}
}
和使用:
复制代码代码如下:var对象= { 'foo ','bar},我;
{试
为(i = 0,len = object.length;我< len;i++){
抛出异常的东西
}
}
catch(e){
处理/异常
}
41设置为xmlhttprequests超时。
后一个XHR请求需要很长的时间(例如,由于网络问题),你可能需要中止请求。然后你可以使用XHR(setTimeout)相匹配的呼叫。
复制代码代码如下:var =新的XMLHttpRequest(XHR);
xhr.onreadystatechange =函数(){
如果(this.readystate = = 4){
ClearTimeout(超时);
带有响应数据的某事
}
}
VaR超时= setTimeout()函数(){
(XHR。中止); / /调用错误回调
60 * 1000后超时};
Xhr.open(' ',网址,真的);

Xhr.send();
此外,一般应避免完全同步Ajax请求。
42处理WebSocket超时
通常,在一个WebSocket连接被创建,如果你没有一个活动,服务器将断开连接(时间)30秒后,防火墙也将休息一段时间后。

为了防止超时问题,您可能需要间歇性地向服务器发送空消息。要做到这一点,您可以在代码中添加以下两个函数:一个用于保持连接,另一个用于取消连接。

使用一个值:
复制代码如下:var值= 0;
功能存活(){
var超时= 15000;
如果(websocket.readystate = = WebSocket。打开){
WebSocket.send();
}
值= setTimeout(KeepAlive,超时);
}
功能cancelkeepalive(){
如果(值){
canceltimeout(值);
}
}
keepalive()方法应补充的开放端()的WebSocket连接方法,并cancelkeepalive()在关闭后最后加()方法。
43 u2013牢记原经营者总是比函数调用更有效。Use VanillaJS。
例如,不要使用:
复制代码代码如下:var min = Math.min(A,B);
A.push(V);
和使用:
复制代码代码如下;
一个{ a.length } = V;
44不要忘记使用代码整洁的工具,当代码编码。使用JSLint和代码压缩工具(缩小)(如JSMin)在网上。节省时间的工具:代码美化与格式化工具

45 u2013 Javascript是难以置信的。

总结

我知道还有很多其他的技巧,技巧和最佳实践,所以如果你有其他的反馈或纠正,你想添加或分享我,请指出在评注中。