在这里记录着每天自己遇到的一道印象深刻的前端问题,以及一道生活中随处可见的小问题。
强迫自己形成积累的习惯,鞭挞自己不断前行,共同学习。
ES6 class
构造以及继承的底层实现原理
《ES6 类以及继承的实现原理》
new
?
点击 function myNew(Obj, ...args) { var obj = Object.create(Obj.prototype); //使用指定的原型对象及其属性去创建一个新的对象 Obj.apply(obj, args); // 绑定 this 到obj, 设置 obj 的属性 return obj; // 返回实例 } 复制代码 ==
的类型转化规则
点击 [] == false // true {} == false // false
1,null 和 undefined,相等。
2,数字和字符串,转化为数字再比较。
3,如果有 true 或 false,转换为 1 或 0,再比较。
4,如果有引用类型,优先调用 valueOf。
5,其余都不相等。
DOM
和 BOM
有什么区别 ?
点击 DOM 是为了操作文档出现的 API,document 是其的一个对象 DOM 和文档有关,这里的文档指的是网页,也就是 html 文档。DOM 和浏览器无关,他关注的是网页本身的内容。
BOM 是为了操作浏览器出现的 API,window 是其的一个对象 window 对象既为 javascript 访问浏览器提供 API,同时在 ECMAScript 中充当 Global 对象
doctype
有什么用?
点击 doctype 是一种标准通用标记语言的文档类型声明,目的是告诉标准通用标记语言解析器要使用什么样的文档类型定义(DTD)来解析文档。
声明是用来指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令。 声明必须是 HTML 文档的第一行,位于 html 标签之前。 浏览器本身分为两种模式,一种是标准模式,一种是怪异模式,浏览器通过 doctype 来区分这两种模式,doctype 在 html 中的作用就是触发浏览器的标准模式,如果 html 中省略了 doctype,浏览器就会进入到 Quirks 模式的怪异状态,在这种模式下,有些样式会和标准模式存在差异,而 html 标准和 dom 标准值规定了标准模式下的行为,没有对怪异模式做出规定,因此不同浏览器在怪异模式下的处理也是不同的,所以一定要在 html 开头使用 doctype。
this
对象,就是定义时所在的对象,而不是使用时所在的对象,用 call apply bind
也不能改变 this
指向new
命令,否则会抛出一个错误。arguments
对象,该对象在函数体内不存在。如果要用,可以用 rest
参数代替。yield
命令,因此箭头函数不能用作 Generator
函数。prototype
new
一个对象经历了什么
点击 function Test() {} const test = new Test(); 复制代码
const obj = {}
obj.constructor = Test; obj.__proto__ = Test.prototype;
Test.call(obj)
event.target
和 event.currentTarget
区别
event.target
返回触发事件的元素, event.currentTarget
返回绑定事件的元素
<transition>
的类名详解?
点击 在进入/离开的过渡中,会有 6 个 class 切换。
v-enter:定义进入过渡的开始状态。在元素被插入之前生效,在元素被插入之后的下一帧移除。
v-enter-active:定义进入过渡生效时的状态。在整个进入过渡的阶段中应用,在元素被插入之前生效,在过渡/动画完成之后移除。这个类可以被用来定义进入过渡的过程时间,延迟和曲线函数。
v-enter-to: 定义进入过渡的结束状态。在元素被插入之后下一帧生效 (与此同时 v-enter 被移除),在过渡/动画完成之后移除。
v-leave: 定义离开过渡的开始状态。在离开过渡被触发时立刻生效,下一帧被移除。
v-leave-active:定义离开过渡生效时的状态。在整个离开过渡的阶段中应用,在离开过渡被触发时立刻生效,在过渡/动画完成之后移除。这个类可以被用来定义离开过渡的过程时间,延迟和曲线函数。
v-leave-to: 定义离开过渡的结束状态。在离开过渡被触发之后下一帧生效 (与此同时 v-leave 被删除),在过渡/动画完成之后移除。
onload
事件。
页面关闭时,先 onbeforeunload
事件,再 onunload
事件。
页面刷新时先执行 onbeforeunload
事件,然后 onunload
事件,最后 onload
事件。
因此监听 onbeforeunload
事件,如下:
window.addEventListener('beforeunload', e => this.beforeunloadFn(e)); window.removeEventListener('beforeunload', e => this.beforeunloadFn(e)); var add = (x, y) => x + y
,我们可以这样进行柯里化:
//比较容易读懂的ES5写法 var add = function(x) { return function(y) { return x + y; }; }; //ES6写法,也是比较正统的函数式写法 var add = x => y => x + y; //试试看 var add2 = add(2); var add200 = add(200); add2(2); // =>4 add200(50); // =>250 复制代码