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 相关文章推荐
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 Javascript
javascript中的parseInt和parseFloat区别
Jul 12 Javascript
Jquery同辈元素选中/未选中效果的实例代码
Aug 01 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
Jun 11 Javascript
AngularJS 中文API参考手册
Jul 28 Javascript
微信小程序 wx:key详细介绍
Oct 28 Javascript
Node.js的特点详解
Feb 03 Javascript
js学习心得_一个简单的动画库封装tween.js
Jul 14 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
Dec 24 Javascript
JavaScript数组去重算法实例小结
May 07 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
Apr 10 Javascript
小程序实现锚点滑动效果
Sep 23 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
(function($){...})(jQuery)的意思
2010/07/22 Javascript
js获取元素在浏览器中的绝对位置
2010/07/24 Javascript
浅析javascript的间隔调用和延时调用
2014/11/12 Javascript
js生成验证码并直接在前端判断
2015/05/15 Javascript
快速掌握jQuery插件WebUploader文件上传
2016/11/07 Javascript
jQuery图片瀑布流的简单实现代码
2017/03/15 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
详细分析python3的reduce函数
2017/12/05 Python
influx+grafana自定义python采集数据和一些坑的总结
2018/09/17 Python
python try except 捕获所有异常的实例
2018/10/18 Python
浅谈Python中的bs4基础
2018/10/21 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
Python 实现两个列表里元素对应相乘的方法
2018/11/14 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
Python如何筛选序列中的元素的方法实现
2019/07/15 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
个人能力自我鉴赏
2014/01/25 职场文书
骨干教师考核评语
2014/12/31 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python