10个JavaScript开发必须会的实用小技巧

每种编程语言都有一些“黑魔法”或者说小技巧,JS 也不例外,今天笔者整理了一份自己最近用到的一些小技巧分享给大家,前 4 节是一些基础技术,虽然是基础但是在某些特殊时刻还蛮有用的,不至于加载一堆体积庞大的第三方库。后 7 节是借助 ES6 或者浏览器新特性实现,相信其中有些你一定用过,今天码云笔记用本文归纳一下分享给大家。
一、产生随机不重复 ID
有时候在没有第三方类库的情况下,我们希望希望产生随机且不重复的 ID,这时我会使用「随机数」搭配「时间戳」的方式,首先使用 Math.random()产生 0~1 之间约 16~17 位数的随机浮点数,再通过 toString(36)的方法缩短其位数,并转换为 36 进位( 0~9、a~z ),若嫌太长还可用 substr 方法进行自行截取。
Math.random().toString(36).substr(2,n); // 截取小数点后的部分,n 在实际应用中修改成你需要的位数
第二步使用 Date.now()取得目前的毫秒数,总共有 13 位数,和上个方法一样我们通过 toString(36)的方法缩短其位数,并转换为 36 进位,接着用 substr 自行截取需要的位数。
Date.now().toString(36).substr(4,n); //由于前几位固定不变,我们从第 5 位开始进去截取获取随机数,n 在实际应用中修改成你需要的位数
将随机数的片段和时间戳的片段进行组合,就能产生一个随机不重复的 id 。( 应该说重复机率低到不可能重复,如果你遇到重复的,恭喜你,建议你今天买彩票 )
Math.random().toString(36).substr(2,n) + Date.now().toString(36).substr(4,n);
二、模板标签替换
开发过程中有时会遇到要取出一段文字中的某些值,如果单纯只是要「替换成别的值」,使用 replace()的方法就能轻松实现,对以下这段字符串来说,里面有几个利用{{}}包覆的标签需要你替换,你会怎么做呢:
大家好,我的公众号是{{name}},今年{{age}}岁了,创建于{{year}}年,欢迎你的关注
如果想要把所有「{{}}」两个大括号内的字替换成对应的值,可以通过以下的方式进行处理,核心的内容就是 replace()方法里的正规表达式/{{(.*?)}}/g,/{|}/g:
const text = '大家好,我的博客是{{name}},今年{{age}}岁了,创建于{{year}}年,欢迎你的关注’;
const obj = {
name: '码云笔记',
age: 2,
year: 2018
};
const result = text.replace(/{{(.*?)}}/g, e => {
return obj[e.replace(/{|}/g,'')];
});
得到的结果就会是:「大家好,我的博客是码云笔记,今年 2 岁了,创建于 2018 年,欢迎你的关注」。
三、快速取整数
在 JavaScript 中取整数,最常见的不外乎就是 Math.round()四舍五入、Math.floor()返回小于等于给定数字的最大整数和 Math.ceil()函数返回大于或等于一个给定数字的最小整数(无条件进位)三种方法,不过如果通过两个「按位取反两次」~~(两个蚯蚓符号),也可以做到无条件舍去小数点的效果,这也是最快可以取整数的方法,下方的代码会先取得一个 0~100 的随机数,然后取出整数的部分。
const num = Math.random() * 100; console.log(num); // 输出原本的随机数 console.log(~~num); // 无条件舍去小数部分,类似 Math.floor()
~是按位取反运算,~~是取反两次。在这里~~的作用是去掉小数部分,因为位运算的操作值要求是整数,其结果也是整数,所以经过位运算的都会自动变成整数。与 Math.floor()不同的是,它只是单纯的去掉小数部分,不论正负都不会改变整数部分。
四、String 转 XML、XML 转 String
在 JavaScript 里如果直接读取 XML,得到的会是一些 XML 节点构成的对象,如果要使用像是 replace()..等字串的操作就必须转换成字串 String 才行,下方代码可以很简单的将 XML 转换成字串 String,处理之后再转回 XML。(注:ie 需要特殊处理,感兴趣的可以去百度搜索)
XML 转字串 String
xmlToString = (new XMLSerializer()).serializeToString(xmlObject);
字串 String 转 XML
stringToXML = (new DOMParser()).parseFromString(xmlString, "text/xml");
五、数组去重
const j = [...new Set([1, 2, 3, 3])] >> [1, 2, 3]
六、数组清洗
洗掉数组中一些无用的值,如 0, undefined, null, false 等
myArray
.map(item => {
// ...
})
// Get rid of bad values
.filter(Boolean);
七、合并对象
JS 中我们经常会有合并对象的需求,比如常见的给用传入配置覆盖默认配置,通过 ES6 扩展运算符就能快速实现。
const person = { name: 'David Walsh', gender: 'Male' };
const tools = { computer: 'Mac', editor: 'Atom' };
const attributes = { handsomeness: 'Extreme', hair: 'Brown', eyes: 'Blue' };
const summary = {...person, ...tools, ...attributes};
/*
Object {
"computer": "Mac",
"editor": "Atom",
"eyes": "Blue",
"gender": "Male",
"hair": "Brown",
"handsomeness": "Extreme",
"name": "David Walsh",
}
*/
八、创建空对象
我们可以使用对象字面量{}来创建空对象,但这样创建的对象有隐式原型 __proto__ 和一些对象方法比如常见的 hasOwnProperty,下面这个方法可以创建一个纯对象。
let dict = Object.create(null); // dict.__proto__ === "undefined" // No object properties exist until you add them
该方法创建的对象没有任何的属性及方法
九、解构别名
ES6 中我们经常会使用对象结构获取其中的属性,但有时候会想重命名属性名,以避免和作用域中存在的变量名冲突,这时候可以为解构属性名添加别名。
const obj = { x: 1 };
// Grabs obj.x as { x }
const { x } = obj;
// Grabs obj.x as as { otherName }
const { x: otherName } = obj;
十、设置函数必传参数
借助 ES6 支持的默认参数特性,我们可以将默认参数设置为一个执行抛出异常代码函数返回的值,这样当我们没有传参时就会抛出异常终止后面的代码运行。
const isRequired = () => { throw new Error('param is required'); };
const hello = (name = isRequired()) => { console.log(`hello ${name}`) };
// This will throw an error because no name is provided
hello();
// This will also throw an error
hello(undefined);
// These are good!
hello(null);
hello('David');
十一、获取查询字符串参数
以前获取 URL 中的字符串参数我们需要通过函数写正则匹配,现在通过 URLSearchParamsAPI 即可实现。
// Assuming "?post=1234&action=edit"
var urlParams = new URLSearchParams(window.location.search);
console.log(urlParams.has('post')); // true
console.log(urlParams.get('action')); // "edit"
console.log(urlParams.getAll('action')); // ["edit"]
console.log(urlParams.toString()); // "?post=1234&action=edit"
console.log(urlParams.append('active', '1')); // "?post=1234&action=edit&active=1"
随着 Javascript 的不断发展,很多语言层面上的不良特性都在逐渐移除或者改进,如今的一行 ES6 代码可能等于当年的几行代码。
拥抱 JS 的这些新变化意味着前端开发效率的不断提升,以及良好的编码体验。当然不管语言如何变化,我们总能在编程中总结一些小技巧来精简代码。
结束语
今天 JavaScript 开发小技巧的分享就到这里,希望能在工作中对你有所帮助,建议大家经常整理梳理自己日常工作中会用到的小方法和小技巧,维护到自己的方法库里,到时用的时候会事半功倍。
以上关于10个JavaScript开发必须会的实用小技巧的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 10个JavaScript开发必须会的实用小技巧

微信
支付宝