在JavaScript12项有用的技术
2017-04-18 12:56
501 查看
1) 转换为布尔使用!!操作符
有时,我们需要检查一些变量是否存在,或者它是否具有有效值,将它们视为真值。对于做这样的验证,你可以使用一个简单的!!(Double negation operator)一个简单的!!变量,它会自动将任何种类的数据转换成布尔值,只有当这个变量具有以下值时,这个变量将返回false:0 ,null,“”,未定义或NaN,否则将返回true。在实践中了解它,看看这个简单的例子:function Account(cash) { this.cash = cash; this.hasMoney = !!cash; } var account = new Account(100.50); console.log(account.cash); // 100.50 console.log(account.hasMoney); // true var emptyAccount = new Account(0); console.log(emptyAccount.cash); // 0 console.log(emptyAccount.hasMoney); // false
在这种情况下,如果account.cash值大于零,则account.hasMoney将为true。
2) 使用+运算符转换为数字
这个魔法真棒!这样做很简单,但它只适用于字符串数字,否则返回NaN(不是数字)。看看这个例子:function toNumber(strNumber) { return +strNumber; } console.log(toNumber("1234")); // 1234 console.log(toNumber("ACB")); // NaN
这个魔法将与Date同时使用,在这种情况下,它将返回时间戳记号:
console.log(+new Date()) // 1461288164385
3) 短路条件
如果您看到类似的代码:if (conected) { login(); }
您可以使用两者之间使用&&(AND运算符)的变量(将被验证)和函数的组合来缩短它。例如,以前的代码可以在一行变小:
conected && login();
您可以这样做来检查对象中是否存在某些属性或函数。类似于以下代码:
user && user.login();
4) 使用||的默认值操作符
今天在ES6中有默认参数功能。为了在旧浏览器中模拟此功能,您可以使用|| (OR运算符)通过将默认值作为第二个参数来使用。如果第一个参数返回false,则第二个参数将被用作默认值。看这个例子:function User(name, age) { this.name = name || "Oliver Queen"; this.age = age || 27; } var user1 = new User(); console.log(user1.name); // Oliver Queen console.log(user1.age); // 27 var user2 = new User("Barry Allen", 25); console.log(user2.name); // Barry Allen console.log(user2.age); // 25
5) 在循环中缓存array.length
这个提示非常简单,并且在循环中处理大阵列时对性能造成巨大的影响。基本上,几乎所有人都写这个同步来迭代一个数组:for (var i = 0; i < array.length; i++) { console.log(array[i]); }
如果您使用较小的数组 - 这很好,但是如果处理大数组,则此代码将在该循环的每次迭代中重新计算数组的大小,这将导致一些延迟。为了避免这种情况,您可以将array.length缓存在一个变量中以使用它,而不是每次在循环期间调用array.length:
var length = array.length; for (var i = 0; i < length; i++) { console.log(array[i]); }
为了使其更小,只需编写此代码:
for (var i = 0, length = array.length; i < length; i++) { console.log(array[i]); }
6)检测对象中的属性
当您需要检查某些属性是否存在并避免运行未定义的函数或属性时,此技巧非常有用。如果您打算编写跨浏览器代码,可能您也将使用此技术。例如,我们假设您需要编写与旧版Internet Explorer 6兼容的代码,并且想要使用document.querySelector()来通过其ID来获取一些元素。但是,在这个浏览器中这个函数不存在,所以要检查这个函数的存在,你可以使用in操作符,看这个例子:if ('querySelector' in document) { document.querySelector("#id"); } else { document.getElementById("id"); }
在这种情况下,如果文档对象中没有querySelector函数,则可以使用document.getElementById()作为备用。
7) 获取数组中的最后一个项目
当您设置开始和结束参数时,Array.prototype.slice(begin,end)可以切割数组。但是如果没有设置结束参数,则该函数将自动设置数组的最大值。我认为很少有人知道这个函数可以接受否定值,如果你设置一个负数作为开始参数,你将从数组中获取最后一个元素:var array = [1, 2, 3, 4, 5, 6]; console.log(array.slice(-1)); // [6] console.log(array.slice(-2)); // [5,6] console.log(array.slice(-3)); // [4,5,6]
8) 数组截断
这种技术可以锁定数组的大小,这对基于要设置的元素数量删除数组的某些元素非常有用。例如,如果你有一个包含10个元素的数组,但是你只想得到前五个元素,你可以通过设置array.length = 5来截断数组,使其变小。看到这个例子:var array = [1, 2, 3, 4, 5, 6]; console.log(array.length); // 6 array.length = 3; console.log(array.length); // 3 console.log(array); // [1,2,3]
9) 全部更换
String.replace()函数允许使用String和Regex来替换字符串,本质上这个函数只替换第一个事件。但是您可以通过使用正则表达式末尾的/g来模拟replaceAll()函数:var string = "john john"; console.log(string.replace(/hn/, "ana")); // "joana john" console.log(string.replace(/hn/g, "ana")); // "joana joana"
10) 合并数组
如果需要合并两个数组,可以使用Array.concat()函数:var array1 = [1, 2, 3]; var array2 = [4, 5, 6]; console.log(array1.concat(array2)); // [1,2,3,4,5,6];
但是,这个函数并不是最合适的大数组,因为它将通过创建一个新的数组来消耗大量的内存。在这种情况下,您可以使用Array.push.apply(arr1,arr2),而不是创建一个新的数组 - 它会合并第一个数组,减少内存使用量:
var array1 = [1, 2, 3]; var array2 = [4, 5, 6]; 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):var elements = document.querySelectorAll("p"); // NodeList var arrayElements = [].slice.call(elements); // Now the NodeList is an array var arrayElements = Array.from(elements); // This is another way of converting NodeList to Array
12) 改组数组的元素
要随意使用任何像Lodash这样的外部库的数组元素,只需运行这个魔术:var list = [1, 2, 3]; console.log(list.sort(function() { return Math.random() - 0.5 })); // [2,1,3]
结论
现在,您学习了一些有用的JS黑客技術,它们主要用于缩小JavaScript代码,其中一些技巧用于许多流行的JS框架,如Lodash,Underscore.js,Strings.js等。如果你想进一步深入了解更多关于如何减少你的代码甚至更多,甚至保护它免于窥探与我们谈话。我希望你喜欢这篇文章,如果你知道其他JS黑客,请告诉我们!
相关文章推荐
- 一个简单有用的JavaScript CRACK程序的解决技术关键点
- 19 个 JavaScript 有用的简写技术
- 转载:50有用的JavaScript和jQuery技术和插件
- 19 个 JavaScript 有用的简写技术
- 19 个 JavaScript 有用的简写技术
- 一个简单有用的JavaScript CRACK程序的解决技术关键点
- 在b、s开发中经常用到的javaScript技术
- B/S开发常用JavaScript技术
- 在b-s开发中经常用到的javaScript技术
- JAVASCRIPT:-->在b-s开发中经常用到的javaScript技术
- 在b/s开发中经常用到的javaScript技术
- 在b/s开发中经常用到的javaScript技术
- 在b/s开发中经常用到的javascript技术
- b/s开发常用javaScript技术
- 网站开发中经常用到的javaScript技术
- Struts中不同的Action和ActionForm组合(在技术中心看到的文章,觉得有用,所以自己收藏一下)引自http://blog.csdn.net/sean_gao/
- 在b/s开发中经常用到的javaScript技术
- 在b/s开发中经常用到的javaScript技术
- 在b/s开发中经常用到的javaScript技术
- 在b/s开发中经常用到的javaScript技术