你可能不知道的JavaScript代码片段和技巧(上)

JavaScript是一个绝冠全球的编程语言,可用于Web开发、移动应用开发(PhoneGap、Appcelerator)、服务器端开发(Node.js和Wakanda等等。JavaScript还是很多新手踏入编程世界的第一个语言。既可以用来显示浏览器中的简单提示框,也可以通过nodebot或nodruino来控制机器人。能够编写结构清晰、性能高效的JavaScript代码的开发人员,现如今已成了招聘市场最受追捧的人。

在这篇文章里,我将分享一些JavaScript的技巧、秘诀和最佳实践,除了少数几个外,不管是浏览器的JavaScript引擎,还是服务器端JavaScript解释器,均适用。

1、首次为变量赋值时务必使用var关键字

变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量。

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、underfined、null、0、false、NaN、空字符串的逻辑结果均为false

4、行尾使用分号

实践中最好还是使用分号,忘了写也没事,大部分情况下JavaScript解释器都会自动添加。

5、使用对象构造器

function  Person(firstName,  lastName){

????this.firstName  =??firstName;

????this.lastName  =  lastName;????????

}??        //欢迎加入前端全栈开发交流圈一起学习交流:1007317281

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

6、使用typeofinstanceofcontructor

  • typeof:JavaScript一元操作符,用于以字符串的形式返回变量的原始类型,注意,typeof null也会返回object,大多数的对象类型(数组Array、时间Date等)也会返回object
  • instanceof:内部原型属性,可以通过代码重写
  • contructor:JavaScript操作符,会在原型链中的构造器中搜索,找到则返回true,否则返回`false``

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

    typeof  arr; // return "object"

    arr??instanceof  Array  // true

    arr.constructor();??//[]

7、使用自调用函数

函数在创建之后直接自动执行,通常称之为自调用匿名函数(Self-Invoked Anonymous Function)或直接调用函数表达式(Immediately Invoked Function Expression )。格式如下:

(function(){

????// some private code that will be executed automatically

})();??

(function(a,b){

????var  result  =  a+b;

????return  result;

})(10,20)

8、从数组中随机获取成员

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

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

9、获取指定范围内的随机数

这个功能在生成测试用的假数据时特别有数,比如介与指定范围内的工资数。

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

10、生成从0到指定值的数字数组

var  numbersArray  =  []  ,  max  =  100;

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

11、生成随机的字母数字字符串


function  generateRandomAlphaNum(len)  {

????var  rdmString  =  "";

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

????return??rdmString.substr(0,  len);

}            //欢迎加入前端全栈开发交流圈一起学习交流:1007317281

12、打乱数字数组的顺序


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]??*/

这里使用了JavaScript内置的数组排序函数,更好的办法是用专门的代码来实现(如Fisher-Yates算法).

13、字符串去空格

Java、C#和PHP等语言都实现了专门的字符串去空格函数,但JavaScript中是没有的,可以通过下面的代码来为String对象函数一个trim函数:


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

新的JavaScript引擎已经有了trim()的原生实现。

14、数组之间追加

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] */

15、对象转换为数组

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

16、验证是否是数字

function  isNumber(n){

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

}                     //欢迎加入前端全栈开发交流圈一起学习交流:1007317281

17、验证是否是数组

function  isArray(obj){

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

}

但如果toString()方法被重写过得话,就行不通了。也可以使用下面的方法:

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

如果在浏览器中没有使用frame,还可以用instanceof,但如果上下文太复杂,也有可能出错。


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

18、获取数组中的最大值和最小值

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

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

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

19、清空数组

var  myArray  =  [12  ,  222  ,  1000  ];??

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

20、不要直接从数组中deleteremove元素

如果对数组元素直接使用delete,其实并没有删除,只是将元素置为了undefined。数组元素删除应使用splice

切忌:


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

21、使用length属性截断数组

前面的例子中用length属性清空数组,同样还可用它来截断数组:

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

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

与此同时,如果把length属性变大,数组的长度值变会增加,会使用undefined来作为新的元素填充。length是一个可写的属性。


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

myArray[myArray.length  -  1]  ;  // undefined

22、在条件中使用逻辑与或

var  foo  =  10;??

foo  ==  10  &&  doSomething();  // is the same thing as if (foo == 10) doSomething();

foo  ==  5  ||  doSomething();  // is the same thing as if (foo != 5) doSomething();

逻辑或还可用来设置默认值,比如函数参数的默认值。

function  doSomething(arg1){

????arg1  =  arg1  ||  10;  // arg1 will have 10 as a default value if it’s not already set

}

感谢您的观看,如有不足之处,欢迎批评指正。

本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。**获取资料

原文地址:https://blog.51cto.com/14145734/2391938

时间: 2024-08-25 12:34:51

你可能不知道的JavaScript代码片段和技巧(上)的相关文章

你可能不知道的JavaScript代码片段和技巧(下)

JavaScript是一个绝冠全球的编程语言,可用于Web开发.移动应用开发(PhoneGap.Appcelerator).服务器端开发(Node.js和Wakanda等等.JavaScript还是很多新手踏入编程世界的第一个语言.既可以用来显示浏览器中的简单提示框,也可以通过nodebot或nodruino来控制机器人.能够编写结构清晰.性能高效的JavaScript代码的开发人员,现如今已成了招聘市场最受追捧的人. 在这篇文章里,我将分享一些JavaScript的技巧.秘诀和最佳实践,除了少

10个你必须知道的jQueryMobile代码片段(转)

1.在列表项和按钮上禁用文本截断      如果你的列表项或者按钮上是一个很长的文本,它将会被jQuery Mobile自动截断,要禁用这个截断设置,需要在CSS选择器上添加属性"white-space:normal".例如,在按钮禁止截断:      .ui-btn-text{           white-space:normal;      }      在列表项上禁止截断:      .ui-li-desc{           white-space:norma;     

你所不知道的JavaScript数组

你所不知道的JavaScript数组 相信每一个 javascript 学习者,都会去了解 JS 的各种基本数据类型,数组就是数据的组合,这是一个很基本也十分简单的概念,他的内容没多少,学好它也不是件难事情.但是本文着重要介绍的并不是我们往常看到的 Array,而是 ArrayBuffer. 我写的很多东西都是因为要完成某些特定的功能而刻意总结的,可以算是备忘,本文也是如此!前段时间一直在研究 Web Audio API 以及语音通信相关的知识,内容侧重于音频流在 AudioContext 各个

常用Javascript代码片段集锦

说集锦有点夸张了,因为只是收集了一部分. 这是我业余时间收集的一些常用的javascript代码片段. 不过代码的组织比较混乱,主要是通过全局函数和对象封装,后期会继续添加和完善. 如果有错误欢迎批评指正, 当然也欢迎PR或提issue. 希望大家一起完善! 如果项目依赖jQuery/Zepto等库或框架, 可能有些代码用不到,因为这些库或框架已经帮我们封装好了. 这主要是为了脱离jQUery/Zepto等库的情况下使用. Github: https://github.com/zffMaple/

精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解

原文:Chalarangelo  译文:IT168 https://github.com/Chalarangelo/30-seconds-of-code#anagrams-of-string-with-duplicates 该项目来自于 Github 用户 Chalarangelo,目前已在 Github 上获得了 5000 多Star,精心收集了多达 48 个有用的 JavaScript 代码片段,该用户的代码可以让程序员在 30 秒甚至更少的时间内理解这些经常用到的基础算法,来看看这些 Ja

一些你可能不知道的JavaScript知识(知道了之后可是大大有用的哦)

1.!!将一个值方便快速转化为布尔值 console.log( !!window===true ); 2.不声明第三个变量实现交换 var a=1,b=2; a=[b,b=a][0];//执行完这句代码之后 a的值为2 b的值为1了 3.&&和||的用法 (学会了立马感觉高大尚了吧) 用代码说话吧 var day=(new Date).getDay()===0; //传统if语句 if (day) { alert('Today is Sunday!'); }; //运用逻辑与代替if da

14 个你可能不知道的 JavaScript 调试技巧

了解你的工具可以极大的帮助你完成任务.尽管 JavaScript 的调试非常麻烦,但在掌握了技巧 (tricks) 的情况下,你依然可以用尽量少的的时间解决这些错误 (errors) 和问题 (bugs) . 我们会列出14个你可能不知道的调试技巧, 但是一旦知道了,你就会迫不及待的想在下次需要调试 JavaScript 代码的时候使用它们! 现在开始. 虽然许多技巧也可以用在别的检查工具上,但大部分的技巧是用在 Chrome Inspector 和 Firefox 上的. 1. 'debugg

不知道的JavaScript

你不知道的JavaScript上卷笔记 前言 You don't know JavaScript是github上一个系列文章  初看到这一标题的时候,感觉怎么老外也搞标题党,用这种冲突性比较强的题目吸引眼球,以致最初真没去看内容.直到出了中文版<你不知道的JavaScript>,一看评价大家都说好,买来一读,内容果然很好,很多地方,让我这个半路转行JavaScript的人豁然开朗.中文版现在出了上卷,中卷应该很快会推出,下卷就要等久一点了 作用域和闭包 作用域是什么 1.现代JavaScrip

10个你必须知道的jQueryMobile代码片段

1.在列表项和按钮上禁用文本截断     如果你的列表项或者按钮上是一个很长的文本,它将会被jQuery Mobile自动截断,要禁用这个截断设置,需要在CSS选择器上添加属性"white-space:normal".例如,在按钮禁止截断:     .ui-btn-text{          white-space:normal;     }     在列表项上禁止截断:     .ui-li-desc{          white-space:norma;     }     应