理解Object.defineProperty的作用:就是为对象配置属性,并配置该属性的特点,比如能否修改,能否遍历等
// 函数声明(Function Declaration)
function sum(x, y) {
return x + y;
}
// 函数表达式(Function Expression)
let mySum = function (x, y) {
return x + y;
};
SAP&MAP.png
前端:你要懂的单页面应用和多页面应用
单页面:一个html文件
多页面:多个html文件
split:本意是使...分离,分割成数组
slice:本意是切片的意思,分割数组或字符串
splice:本意是拼接的意思,向数组中添加项目,然后返回新数组 / 从数组中删除项目,然后返回新数组。
reduce:本意是减少的意思,它用来将数组(多个值)计算成唯一一个值
propagation&capture.jpg
什么叫捕获什么叫冒泡,彻底弄懂JS的事件冒泡和事件捕获这真是一篇好文章啊,尤其是文章最后举的例子真是神来之笔。简单来说,捕获就是由外向内执行,冒泡就是由内向外执行。
他们是描述事件触发时序问题的术语。事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件。相反的,事件冒泡是自下而上的去触发事件。绑定事件方法的第三个参数,就是控制事件触发顺序是否为事件捕获。true,事件捕获;false,事件冒泡。默认false,即事件冒泡。Jquery的e.stopPropagation会阻止冒泡,意思就是到我为止,我的爹和祖宗的事件就不要触发了。
浏览器默认是冒泡,也就是说addEventListener(event,fn,useCapture)的第三个参数默认为false
参考:定义类
在ES5中,变量或方法的声明会提升,在ES6中声明不会提升,比如class的声明啊,箭头函数应该也存在此问题吧?
class中所有的函数、方法、构造函数、getters或setters都在严格模式下执行。因此如果我们没有指定this的值,this值将为undefined。看下列代码
let speak = obj.speak;
speak(); // undefined,即使在非严格模式下
下面这段代码精彩哦:
class Animal {
speak() {
return this;
}
static eat() {
return this;
}
}
let obj = new Animal();
obj.speak(); // Animal {}
let speak = obj.speak;
speak(); // undefined
Animal.eat() // class Animal
let eat = Animal.eat;
eat(); // undefined
改为ES5的写法:
function Animal() { }
Animal.prototype.speak = function() {
return this;
}
// 原来还有这种写法,长见识了
Animal.eat = function() {
return this;
}
let obj = new Animal();
let speak = obj.speak;
speak(); // global object
let eat = Animal.eat;
eat(); // global object
ES6中类的概念,本质上无非是ES5中原型链继承。类中的constructor中定义的是new出来的对象中的属性,constructor外面的就是原型链继承的东西了。类的继承extend就是原型链的继承。需要注意的是,在类中可以定义static方法,它只能通过类直接调用,而不能通过实例调用,它的本质等同于ES5中functionName.staticFunction
forEach()和map()的区别:forEach用来对每个元素做处理,map用来修改数组的每个元素(map返回一个修改后的新数组,但不改变原数组)。
ES6入门之set和map:注意这是一种数据结构,不是像map()是一种方法。
JavaScript中reduce()方法:明白了reduce的意思是减少就抓住了重点。
Δjs的严格模式和非严格模式的区别:
网友评论