20个实用的JavaScript技巧分享


Posted in Javascript onNovember 28, 2014

众所周知,JavaScript是一门非常流行的编程语言,开发者用它不仅可以开发出炫丽的Web程序,还可以用它来开发一些移动应用程序(如PhoneGap或Appcelerator),它还有一些服务端实现,比如NodeJS、Wakanda以及其它实现。此外,许多开发者都会把JavaScript选为入门语言,使用它来做一些弹出窗口等小东西。

在这篇文章中,作者将会向大家分享JavaScript开发的小技巧、最佳实践等非常实用的内容,不管你是前端开发者还是服务端开发者,都应该来看看这些小技巧,它们绝对会让你受益的。

文中所提供的代码片段都已经过最新版的Chrome 30测试,该浏览器使用V8 JavaScript引擎(V8 3.20.17.15)。

1.第一次给变量赋值时,别忘记var关键字

给一个未声明的变量赋值,该变量会被自动创建为全局变量,在JS开发中,应该避免使用全局变量。

2.使用===替换==

并且永远不要使用=或!=。

[10] === 10    // is false  

[10]  == 10    // is true  

'10' == 10     // is true  

'10' === 10    // is false  

 []   == 0     // is true  

 [] ===  0     // is false  

 '' == false   // is true but true == "a" is false  

 '' ===   false // is false  

3.使用分号来作为行终止字符

在行终止的地方使用分号是一个很好的习惯,即使开发人员忘记加分号,编译器也不会有任何提示,因为在大多数情况下,JavaScript解析器会自动加上。

4.创建构造函数

function Person(firstName, lastName){  

    this.firstName =  firstName;  

    this.lastName = lastName;          

}    

  

var Saad = new Person("Saad", "Mousliki"); 

5.应当小心使用typeof、instanceof和constructor

var arr = ["a", "b", "c"];  

typeof arr;   // return "object"   

arr  instanceof Array // true  

arr.constructor();  //[] 

6.创建一个Self-calling函数

这通常会被称为自我调用的匿名函数或立即调用函数表达式(LLFE)。当函数被创建的时候就会自动执行,好比下面这个:

(function(){  

    // some private code that will be executed automatically  

})();    

(function(a,b){  

    var result = a+b;  

    return result;  

})(10,20) 

7.给数组创建一个随机项

var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];  

  

var  randomItem = items[Math.floor(Math.random() * items.length)]; 

8.在特定范围里获得一个随机数

下面这段代码非常通用,当你需要生成一个假的数据用来测试时,比如在最低工资和最高之前获取一个随机值。

var x = Math.floor(Math.random() * (max - min + 1)) + min; 

9.在数字0和最大数之间生成一组随机数

var numbersArray = [] , max = 100;  

  

for( var i=1; numbersArray.push(i++) < max;);  // numbers = [0,1,2,3 ... 100] 

10.生成一组随机的字母数字字符

function generateRandomAlphaNum(len) {  

    var rdmstring = "";  

    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));  

    return  rdmString.substr(0, len);  

  

} 

11.打乱数字数组

var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];  

numbers = numbers.sort(function(){ return Math.random() - 0.5});  

/* the array numbers will be equal for example to [120, 5, 228, -215, 400, 458, -85411, 122205]  */

12.字符串tim函数

trim函数可以删除字符串的空白字符,可以用在Java、C#、PHP等多门语言里。

String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g, "");};

13.数组追加

var array1 = [12 , "foo" , {name "Joe"} , -2458];  

  

var array2 = ["Doe" , 555 , 100];  

Array.prototype.push.apply(array1, array2);  

/* array1 will be equal to  [12 , "foo" , {name "Joe"} , -2458 , "Doe" , 555 , 100] */ 

14.将参数对象转换为数组

var argArray = Array.prototype.slice.call(arguments); 

15.验证一个给定参数是否为数字

function isNumber(n){  

    return !isNaN(parseFloat(n)) && isFinite(n);  

} 

16.验证一个给定的参数为数组

function isArray(obj){  

    return Object.prototype.toString.call(obj) === '[object Array]' ;  

} 

注意,如果toString()方法被重写了,你将不会得到预期结果。
或者你可以这样写:

Array.isArray(obj); // its a new Array method 

同样,如果你使用多个frames,你可以使用instancesof,如果内容太多,结果同样会出错。

var myFrame = document.createElement('iframe');  

document.body.appendChild(myFrame);  

  

var myArray = window.frames[window.frames.length-1].Array;  

var arr = new myArray(a,b,10); // [a,b,10]    

  

// instanceof will not work correctly, myArray loses his constructor   

// constructor is not shared between frames  

arr instanceof Array; // false 

17.从数字数组中获得最大值和最小值

var  numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];   

var maxInNumbers = Math.max.apply(Math, numbers);   

var minInNumbers = Math.min.apply(Math, numbers); 

18.清空数组

var myArray = [12 , 222 , 1000 ];    

myArray.length = 0; // myArray will be equal to []. 

19.不要用delete从数组中删除项目

开发者可以使用split来代替使用delete来删除数组项。与其删除数组中未定义项目,还不如使用delete来替代。

var items = [12, 548 ,'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' ,2154 , 119 ];   

items.length; // return 11   

delete items[3]; // return true   

items.length; // return 11   

/* items will be equal to [12, 548, "a", undefined × 1, 5478, "foo", 8852, undefined × 1, "Doe", 2154,       119]   */ 

也可以……
var items = [12, 548 ,'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' ,2154 , 119 ];   

items.length; // return 11   

items.splice(3,1) ;   

items.length; // return 10   

/* items will be equal to [12, 548, "a", 5478, "foo", 8852, undefined × 1, "Doe", 2154,       119]   */

delete方法应该删除一个对象属性。

20.使用length属性缩短数组

如上文提到的清空数组,开发者还可以使用length属性缩短数组。

var myArray = [12 , 222 , 1000 , 124 , 98 , 10 ];    

myArray.length = 4; // myArray will be equal to [12 , 222 , 1000 , 124]. 

如果你所定义的数组长度值过高,那么数组的长度将会改变,并且会填充一些未定义的值到数组里,数组的length属性不是只读的。

myArray.length = 10; // the new array length is 10   

myArray[myArray.length - 1] ; // undefined 
Javascript 相关文章推荐
使用jQuery操作Cookies的实现代码
Oct 09 Javascript
js 实现css风格选择器(压缩后2KB)
Jan 12 Javascript
使用Grunt.js管理你项目的应用说明
Apr 24 Javascript
通过action传过来的值在option获取进行验证的方法
Nov 14 Javascript
探讨JQUERY JSON的反序列化类 using问题的解决方法
Dec 19 Javascript
js读取并解析JSON类型数据的方法
Nov 14 Javascript
VUEJS实战之修复错误并且美化时间(2)
Jun 13 Javascript
利用Vue.js+Node.js+MongoDB实现一个博客系统(附源码)
Apr 24 Javascript
jQuery+ajax实现局部刷新的两种方法
Jun 08 jQuery
在小程序开发中使用npm的方法
Oct 17 Javascript
小程序显示弹窗时禁止下层的内容滚动实现方法
Mar 20 Javascript
JavaScript实现京东快递单号查询
Nov 30 Javascript
js获取浏览器基本信息大全
Nov 27 #Javascript
jQuery实现多按钮单击变色
Nov 27 #Javascript
jQuery的ready方法详解
Nov 27 #Javascript
javascript 面向对象封装与继承
Nov 27 #Javascript
javascript制作坦克大战全纪录(2)
Nov 27 #Javascript
javascript制作坦克大战全纪录(1)
Nov 27 #Javascript
使用jsonp完美解决跨域问题
Nov 27 #Javascript
You might like
数据库查询记录php 多行多列显示
2009/08/15 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
jQuery使用手册之一
2007/03/24 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
JS数组去重与取重的示例代码
2014/01/24 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
Python如何调用JS文件中的函数
2019/08/16 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
Python爬取网页信息的示例
2020/09/24 Python
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
天逸系统(武汉)有限公司Java笔试题
2015/12/29 面试题
电子商务应届生求职信
2013/11/16 职场文书
yy司仪主持词
2014/03/22 职场文书
《长相思》听课反思
2014/04/10 职场文书
单位未婚证明范本
2014/11/25 职场文书
解读Vue组件注册方式
2021/05/15 Vue.js