事件冒泡
function stopEvent(event){ //阻止冒泡事件 var e = arguments.callee.caller.arguments[0] || event; // 若省略此句,下面的e改为event,IE运行可以,但是其他浏览器就不兼容 if (e && e.stopPropagation) { e.stopPropagation(); // for Mozilla and Opera } else if (window.event) { window.event.cancelBubble = true; // for IE }}复制代码
强制要求参数
const required = () => {throw new Error('Missing parameter')};const add = (a = required(), b = required()) => a + b;add(1, 2)add(1) // Error: Missing parameter.复制代码
每30秒刷新1次接口的实现方式
setInterval会符合业务需求,然而也需要注意坑,单纯的使用setInterval会导致页面卡死!其原因与JS引擎线程有关。就是说setInterval不会清除定时器队列,每重复执行1次都会导致定时器叠加,最终卡死网页。 但是setTimeout是自带清除定时器的,因此正确解决方法如下:
window.setInterval(() => { setTimeout(fun, 0)}, 30000)复制代码
setInterval必须放在外层(在内层会导致页面卡顿直到崩溃),内层配合setTimeout,即可无限次调用接口
string转换成number
例如: '1' -> 1
- Number('1')
- parseInt('1', 10)
- parseFloat(‘1.23’)
- '1'- 0 (最常用)
- +'1'
判断是否相等(==)
- null和undefined,相等。
- 数字和字符串,转化为数字再比较。
- 如果有true或false,转换为1或0,再比较。
- 如果有引用类型,优先调用valueOf。
- 其余都不相等。
console.log(undefined == false); // falseconsole.log(null == false); // falseconsole.log(0 == false); // trueconsole.log(NaN == false); // falseconsole.log("" == false); // true复制代码
new
new: 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
function Person1(name) { this.name = name; // 没有返回值}function Person2(name) { this.name = name; return name; // 返回非对象}function Person3(name) { this.name = name; return { a: 1 }; // 返回对象}function Person4(name) { this.name = name; return null; // 返回null}var p1 = new Person1("aa");var p2 = new Person2("bb");var p3 = new Person3("cc");var p4 = new Person4("dd");console.log(p1); // Person1 {name: "aa"}console.log(p2); // Person2 {name: "bb"}console.log(p3); // {a: 1}console.log(p4); // Person4 {name: "dd"}复制代码
使用 new 来创建对象||调用构造函数时,如果函数没有返回值|| 返回值是非对象,那么返回的就是构造函数实例后的对象;如果函数return对象,那么返回这个对象(特例:return null,返回的也是构造函数实例后的对象而非null)
箭头函数
箭头函数中没有this绑定,必须通过查找作用域链来决定其值。 如果箭头函数被非箭头函数包含,则this绑定的是最近一层非箭头函数的this,否则this的值则被设置为全局对象。