~ 实际结果是取反再减一

位运算 NOT 由否定号(~)表示,它是 ECMAScript 中为数不多的与二进制算术有关的运算符之一

位运算 NOT 是三步的处理过程:

1.把运算数转换成 32 位数字

2.把二进制数转换成它的二进制反码

3.把二进制数转换成浮点数

位运算 NOT 实质上是对数字求负,然后减 1;4 > -4 > -5

var与function

JS中function声明和var声明都会被提前,最终得到结果为function,是因为名称解析顺序-Name Resolution Order

这篇文章

script defer && asnyc && module

async 属性。立即请求文件,但不阻塞渲染引擎,而是文件加载完毕后阻塞渲染引擎并立即执行文件内容。

defer 属性。立即请求文件,但不阻塞渲染引擎,等到解析完 HTML 之后再执行文件内容。

HTML5 标准 type 属性,对应值为“module”。让浏览器按照 ECMA Script 6 标准将文件当作模块进行解析,默认阻塞效果同 defer,也可以配合 async 在请求完成后立即执行。

部分函数里面的this

var dx = {
  arr: [1]
}
dx.arr.forEach(function() {console.log(this)}) // ?

如果你看过 forEach 的说明文档便会知道,它有两个参数,第一个是回调函数,第二个是 this 指向的对象,这里只传入了回调函数,第二个参数没有传入,默认为 undefined,所以正确答案应该是输出全局对象。

类似的,需要传入 this 指向的函数还有:every()、find()、findIndex()、map()、some(),在使用的时候需要特别注意。