12个非常有用的JavaScript技巧

在这篇文章中,我将分享12个非常有用的JavaScript技巧。这些技巧可以帮助你减少并优化代码。 

1) 使用!!将变量转换成布尔类型 
有时,我们需要检查一些变量是否存在,或者它是否具有有效值,从而将它们的值视为true。对于做这样的检查,你可以使用||(双重否定运算符),它能自动将任何类型的数据转换为布尔值,只有这些变量才会返回false:0,null,"",undefined或NaN,其他的都返回true。我们来看看这个简单的例子: 

Js代码 

  1. function Account(cash) {    
  2.     this.cash = cash;  
  3.     this.hasMoney = !!cash;  
  4. }  
  5. var account = new Account(100.50);    
  6. console.log(account.cash); // 100.50    
  7. console.log(account.hasMoney); // true  
  8.   
  9. var emptyAccount = new Account(0);    
  10. console.log(emptyAccount.cash); // 0    
  11. console.log(emptyAccount.hasMoney); // false    

在这个例子中,如果account.cash的值大于零,则account.hasMoney的值就是true。 

2) 使用+将变量转换成数字 
这个转换超级简单,但它只适用于数字字符串,不然就会返回NaN(不是数字)。看看这个例子: 

Js代码 

  1. function toNumber(strNumber) {    
  2.     return +strNumber;  
  3. }  
  4. console.log(toNumber("1234")); // 1234    
  5. console.log(toNumber("ACB")); // NaN    

这个转换操作也可以作用于Date,在这种情况下,它将返回时间戳: 

Js代码 

  1. console.log(+new Date()) // 1461288164385   

3) 短路条件 
如果你看到过这种类似的代码: 

Js代码 

  1. if (conected) {    
  2.     login();  
  3. }  

那么你可以在这两个变量之间使用&&(AND运算符)来缩短代码。例如,前面的代码可以缩减到一行: 

Js代码 

  1. conected && login();   

你也可以用这种方法来检查对象中是否存在某些属性或函数。类似于以下代码: 

Js代码 

  1. user && user.login();  

4) 使用||设置默认值 
在ES6中有默认参数这个功能。为了在旧版浏览器中模拟此功能,你可以使用||(OR运算符),并把默认值作为它的第二个参数。如果第一个参数返回false,那么第二个参数将会被作为默认值返回。看下这个例子: 

Js代码 

  1. function User(name, age) {    
  2.     this.name = name || "Oliver Queen";  
  3.     this.age = age || 27;  
  4. }  
  5. var user1 = new User();    
  6. console.log(user1.name); // Oliver Queen    
  7. console.log(user1.age); // 27  
  8.   
  9. var user2 = new User("Barry Allen", 25);    
  10. console.log(user2.name); // Barry Allen    
  11. console.log(user2.age); // 25    

5) 在循环中缓存array.length 
这个技巧非常简单,并且在循环处理大数组时能够避免对性能造成巨大的影响。基本上几乎每个人都是这样使用for来循环遍历一个数组的: 

Js代码 

  1. for (var i = 0; i < array.length; i++) {    
  2.     console.log(array[i]);  
  3. }  

如果你使用较小的数组,那还好,但是如果处理大数组,则此代码将在每个循环里重复计算数组的大小,这会产生一定的延迟。为了避免这种情况,你可以在变量中缓存array.length,以便在循环中每次都使用缓存来代替array.length: 

Js代码 

  1. var length = array.length;    
  2. for (var i = 0; i < length; i++) {    
  3.     console.log(array[i]);  
  4. }  

为了更简洁,可以这么写: 

Js代码 

  1. for (var i = 0, length = array.length; i < length; i++) {    
  2.     console.log(array[i]);  
  3. }  

6) 检测对象中的属性 
当你需要检查某些属性是否存在,避免运行未定义的函数或属性时,这个技巧非常有用。如果你打算编写跨浏览器代码,你也可能会用到这个技术。例如,我们假设你需要编写与旧版Internet Explorer 6兼容的代码,并且想要使用document.querySelector()来通过ID获取某些元素。 但是,在现代浏览器中,这个函数不存在。所以,要检查这个函数是否存在,你可以使用in运算符。看下这个例子: 

Js代码 

  1. if ('querySelector' in document) {    
  2.     document.querySelector("#id");  
  3. } else {  
  4.     document.getElementById("id");  
  5. }  

在这种情况下,如果在document中没有querySelector函数,它就会使用document.getElementById()作为代替。 
7) 获取数组的最后一个元素 
Array.prototype.slice(begin,end)可以用来裁剪数组。但是如果没有设置结束参数end的值的话,该函数会自动将end设置为数组长度值。我认为很少有人知道这个函数可以接受负值,如果你将begin设置一个负数的话,你就能从数组中获取到倒数的元素: 

Js代码 

  1. var array = [1, 2, 3, 4, 5, 6];    
  2. console.log(array.slice(-1)); // [6]    
  3. console.log(array.slice(-2)); // [5,6]    
  4. console.log(array.slice(-3)); // [4,5,6]    

8) 数组截断 
这个技术可以锁定数组的大小,这对于要删除数组中固定数量的元素是非常有用的。例如,如果你有一个包含10个元素的数组,但是你只想获得前五个元素,则可以通过设置array.length = 5来阶段数组。看下这个例子: 

Js代码 

  1. var array = [1, 2, 3, 4, 5, 6];    
  2. console.log(array.length); // 6    
  3. array.length = 3;    
  4. console.log(array.length); // 3    
  5. console.log(array); // [1,2,3]    

9) 全部替换 
String.replace()函数允许使用String和Regex来替换字符串,这个函数本身只能替换第一个匹配的串。但是你可以在正则表达式末尾添加/g来模拟replaceAll()函数: 

Js代码 

  1. var string = "john john";    
  2. console.log(string.replace(/hn/, "ana")); // "joana john"    
  3. console.log(string.replace(/hn/g, "ana")); // "joana joana"    

10) 合并数组 
如果你需要合并两个数组,你可以使用Array.concat()函数: 

Js代码 

  1. var array1 = [1, 2, 3];    
  2. var array2 = [4, 5, 6];    
  3. console.log(array1.concat(array2)); // [1,2,3,4,5,6];    

但是,这个函数对于大数组来说不并合适,因为它将会创建一个新的数组并消耗大量的内存。在这种情况下,你可以使用Array.push.apply(arr1,arr2),它不会创建一个新数组,而是将第二个数组合并到第一个数组中,以减少内存使用: 

Js代码 

  1. var array1 = [1, 2, 3];    
  2. var array2 = [4, 5, 6];    
  3. console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];    

11) 把NodeList转换成数组 
如果运行document.querySelectorAll("p")函数,它会返回一个DOM元素数组,即NodeList对象。但是这个对象并没有一些属于数组的函数,例如:sort(),reduce(),map(),filter()。为了启用这些函数,以及数组的其他的原生函数,你需要将NodeList转换为数组。要进行转换,只需使用这个函数:[] .slice.call(elements): 

Js代码 

  1. var elements = document.querySelectorAll("p"); // NodeList    
  2. var arrayElements = [].slice.call(elements); // 现在已经转换成数组了  
  3. var arrayElements = Array.from(elements); // 把NodeList转换成数组的另外一个方法  

12) 对数组元素进行洗牌 
如果要像外部库Lodash那样对数据元素重新洗牌,只需使用这个技巧: 

Js代码 

  1. var list = [1, 2, 3];    
  2. console.log(list.sort(function() {    
  3.     return Math.random() - 0.5  
  4. })); // [2,1,3]  

结论 
现在,你已经学到了一些有用的JS技巧,它们主要用于缩减JavaScript代码量,其中一些技巧在许多流行的JS框架都使用到,如Lodash,Underscore.js,Strings.js等。如果你知道其他JS技巧,欢迎分享!

 

时间: 2024-09-13 01:36:25

12个非常有用的JavaScript技巧的相关文章

12 个非常有用的 JavaScript 技巧

12 个非常有用的 JavaScript 技巧 在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用!!variable做检测,只要变量的值为:0.null." ".undefined或者NaN都将返回的是false,

12个非常实用的JavaScript小技巧

在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用!!variable做检测,只要变量的值为:0.null." ".undefined或者NaN都将返回的是false,反之返回的是true.比如下面的示例: func

分享12个非常实用的JavaScript小技巧_javascript技巧

在这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用!!variable做检测,只要变量的值为:0.null." ".undefined或者NaN都将返回的是false,反之返回的是true.比如下面的示例: func

12个非常实用的JavaScript小技巧【推荐】_javascript技巧

这篇文章中将给大家分享12个有关于JavaScript的小技巧.这些小技巧可能在你的实际工作中或许能帮助你解决一些问题. 使用!!操作符转换布尔值 有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值.为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单.对于变量可以使用!!variable做检测,只要变量的值为:0.null." ".undefined或者NaN都将返回的是false,反之返回的是true.比如下面的示例: funct

19个很有用的 JavaScript库推荐_javascript技巧

然而需要实现一些特定的功能,则可以选择功能更专一的轻量库,今天这篇文章与大家分享16个很有用的 JavaScript 库. Blackbird: Open Source JavaScript Logging UtilityBlackbird 是一款非常酷的 JavaScript 调试工具,带有一个漂亮的界面显示和过滤调试信息. Treesaver.jsTreesaver 是一个用于创建杂志布局的 JavaScript 框架. BibliotypeBibliotype 是一个简单的基于 HTML.

21个值得收藏的Javascript技巧

 1  Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如下: 1 2 var fruits = ['apple', 'peaches', 'oranges', 'mangoes']; var str = fruits.valueOf(); 输出:apple,peaches,oranges,mangoes 其中,valueOf()方法会将Javascri

21个值得收藏的Javascript技巧_javascript技巧

1  Javascript数组转换为CSV格式 首先考虑如下的应用场景,有一个Javscript的字符型(或者数值型)数组,现在需要转换为以逗号分割的CSV格式文件.则我们可以使用如下的小技巧,代码如下: 复制代码 代码如下: var fruits = ['apple', 'peaches', 'oranges', 'mangoes'];var str = fruits.valueOf(); 输出:apple,peaches,oranges,mangoes 其中,valueOf()方法会将Jav

javascript技巧参考大全

javascript技巧参考大全 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcElement.releaseCapture();  事件按键 event.keyCode event.shiftKey event.altKey event.ctrlKey 事件返回值 event.returnValue 鼠标位置 event.x event.y 窗

提供几个有用的Javascript验证脚本

javascript|脚本 这里给大家提供几个有用的Javascript验证脚本,以下是代码片段,供大家参考. function isNum(num,low,hi) { if(isNaN(num)||num<low||num>hi)return false; return true;}function isValidIP(v) { nums=v.split("."); if(nums.length!=4)return false; for(j=0;j<4;j++){