关于JavaScript的一些注意事项


1、所有对象都有 proto 属性,都指向创造对象的函数对象的 prototype。

2、上传文件要使用 formdata 包装。

3、Promise.prototype.catch 方法是 .then(null, rejection) 的别名。

4、同一个 EventTarget 注册了多个相同的 EventListener,那么重复的实例会被抛弃。所以这么做不会使得 EventListener 被调用两次,也不需要用 removeEventListener 手动清除多余的EventListener,因为重复的都被自动抛弃了。

5、当使用 addEventListener() 为一个元素注册事件的时候,句柄里的 this 值是该元素的引用。其与传递给句柄的 event 参数的 currentTarget 属性的值一样,而 target 是直接接受事件的子元素。

6、scrollIntoView() 使 div 底部滚动到视窗。

7、使用 const 的对象和数组的内容是可以被修改的,但数据结构不可变。

8、在 webpack 里,所有的文件都是模块。loader 的作用就是把文件转换成 webpack 可以识别的模块。

9、关于事件循环,执行下一个 task 之前总会清空 microtask。

10、npm 新旧版本覆盖可能会造成迷之问题,这个时候可以试试 node_module 整个删掉重装。

11、*、/ 和 - 操作符都是数字运算专用的。当这些运算符与字符串一起使用时,会强制转换字符串为数字类型的值。

12、document.title 可以直接修改当前 html 的标题。

13、利用对象浅拷贝修改对象,指向同一对象的两个变量修改对象的效果一样。

14、脑洞题:1 和 2 只用一次的情况下怎么得到 4 答案:1<<2。

15、连等赋值从右到左。

16、compositionstart 事件触发于一段文字的输入之前(类似于 keydown 事件,但是该事件仅在若干可见字符的输入之前,而这些可见字符的输入可能需要一连串的键盘操作、语音识别或者点击输入法的备选词)。

17、void 0(void后面加任何东西)用于生成一个绝对的 undefined(不会被重定义),但跟函数会有副作用

18、注意 localStorage 保存的只能是字符串,所以是没有 null 的。

19、坑一个

typeof [] === 'object' // true
typeof null === 'object' // true

20、new() 做了些什么?

var obj = new Base();
var obj  = {};
obj.__proto__ = Base.prototype;
Base.call(obj);

21、stage 0 到 4 的含义:

stage 0 is "i've got a crazy idea",

stage 1 is "this idea might not be stupid",

stage 2 is "let's use polyfills and transpilers to play with it",

stage 3 is "let's let browsers implement it and see how it goes",

stage 4 is "now it's javascript".

22、Object.getOwnPropertyNames(obj).length === 0 判断 obj 是不是空对象。

23、getBoundingClientRect() 用于获取元素宽高以及距离页面边框距离,十分方便。

24、&& 的使用场景:左边为真继续执行右边,如 isDog && bark()。

25、|| 的使用场景:左边为假继续执行右边,如 let i = value || defalutValue。


文章作者: Justin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Justin !
评论