0.前言
本文参考网上的博客文章以及自己平时写项目时的一些心得体会总结的一些JavaScript代码的小技巧,会不定期更新,需要的朋友可以收藏一下。
1.Dom操作
在JavaScript的代码中,原则上是涉及到的Dom操作越少越好,因为Dom操作是非常耗费性能的。以下两份代码在Chrome浏览器(版本61.0.3163.79,64位) 中测试。
1 |
|
同理,如果用JavaScript动态生成Dom元素,可以用拼接字符串+innerHTML的方法,不用 createElement+createTextNode的方法,尤其是在动态生成的Dom元素比较多的情况下。下面是测试代码,测试环境同上。
1 |
|
2.Dom事件
一个简单的需求,比如想给ul下面的li加上点击事件,点击哪个li,就显示那个li的innerHTML。常规实现方法如下。
1 |
|
但是上述代码有两个问题:
for循环,循环的是li,10个li就循环10次,绑定10次事件,100个就循环了100次,绑定100次事件。
如果li不是本来就在页面上的,是js渲染的未来元素,上面的写法是无效的。
事件委托的写法如下。
1 |
|
3.JavaScript对象深浅拷贝
对于JavaScript对象的深浅拷贝,个人认为有以下区别:
- 无论是浅拷贝还是深拷贝都只针对引用数据类型(如Object,Array)
- 浅拷贝只是将对象的引用地址进行拷贝,改变拷贝值,并没有开辟新的栈。
- 深拷贝会开辟新的栈,两个对象指向两个不同的地址。
- 注意下面三段代码的区别。三段代码分别是浅拷贝,单层深拷贝以及深拷贝。
1 | //shallow clone |
4.其他
扩展运算符( spread )
扩展运算符( spread )是三个点(…)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。1
2
3console.log(...[1, 2, 3]); // 1 2 3
console.log(1, ...[2, 3, 4], 5); // 1 2 3 4 5
[...document.querySelectorAll('div')]; // [<div>, <div>, <div>]数组去重(ES6)
1
[...new Set([1,2,1,'1','12','12'])];//[1, 2, "1", "12"]
字符串转浮点数和整数
1
2
3
4
5
6
7
8a = '12.21';
b = +a;//12.21
c = a | 0;//12
d = ~~a;//12
使用模板字符串
name = 'DeveloperYuan';
time = new Date();
const message = `Hello ${name}, it's ${time} now`;结构
1
2const data = {name:'dys', age:1}
const {name, age} = data
参考链接: