- 对象键自动转换字符串 例如:
var a ={b:1} c[a] = 123 则c={'object object': 123}
-
在事件传播期间,有三个阶段:捕获,目标和冒泡。 默认情况下,事件处理程序在冒泡阶段执行(除非您将
useCapture
设置为true
)。 -
call()和bind()都可以传递this关键字引用的对象,但是call会立即执行,
bind
方法会返回函数的拷贝值,但带有绑定的上下文! 它不会立即执行。 -
new Number()是一个内置的函数构造函数。 虽然它看起来像一个数字,但它并不是一个真正的数字:它有一堆额外的功能,是一个对象。
-
Static关键字的作用。定义一个类成员,使它完全独立于该类的任何对象。它能被类本身使用,而不必引用任何特定的实例。
-
JavaScript是一种动态类型语言:我们没有指定某些变量的类型。 在您不知情的情况下,值可以自动转换为另一种类型,称为隐式类型转换。 强制从一种类型转换为另一种类型。- * \ 都会尝试转变为数字类型,只有+号是不同的,数字+字符串=字符串
-
后缀一元运算符
++
:先返回值,后增加值。前缀一元运算符++
:先增加值,再返回值 -
如果使用标记的模板字符串,则第一个参数的值始终是字符串值的数组。 其余参数获取传递到模板字符串中的表达式的值 例如:
var num1 = 1,num2 = 2 function test (arr, str1, str2) { console.log(arr, str1, str2) } test`这是${num1}和${num2}字符` //输出 (3) ["这是", "和", "字符", raw: Array(3)] 1 2
-
在比较相等性,原始类型通过它们的值进行比较,而对象通过它们的引用进行比较。
JavaScript
检查对象是否具有对内存中相同位置的引用。我们作为参数传递的对象和我们用于检查相等性的对象在内存中位于不同位置,所以它们的引用是不同的。例如:
{ age: 18 } === { age: 18 }和 { age: 18 } == { age: 18 } // 返回 false false
-
class是原型链继承的语法糖,async/await是generator的语法糖,循环语句的内部都是用for实现的,只不过算法不同
-
call 是包装在 apply 上面的一颗语法糖,如果我们明确地知道函数接受多少个参数,而且想 一目了然地表达形参和实参的对应关系,那么也可以用 call 来传送参数。 ---《JavaScript设计模式与开发实践》
-
我们把宿主发起的任务称为宏观任务,把 JavaScript 引擎发起的任务称为微观任务。微观任务执行先与宏观任务
-
闭包是一个非常强大的特性,但人们对其也有诸多误解。一种耸人听闻的说法是闭包会造成内存泄露,所以要尽量减少闭包的使用。 局部变量本来应该在函数退出的时候被解除引用,但如果局部变量被封闭在闭包形成的环境 中,那么这个局部变量就能一直生存下去。从这个意义上看,闭包的确会使一些数据无法被及时 销毁。使用闭包的一部分原因是我们选择主动把一些变量封闭在闭包中,因为可能在以后还需要 使用这些变量,把这些变量放在闭包中和放在全局作用域,对内存方面的影响是一致的,这里并不能说成是内存泄露。如果在将来需要回收这些变量,我们可以手动把这些变量设为 null。 跟闭包和内存泄露有关系的地方是,使用闭包的同时比较容易形成循环引用,如果闭包的作用域链中保存着一些 DOM 节点,这时候就有可能造成内存泄露。但这本身并非闭包的问题,也 并非 JavaScript 的问题。在 IE 浏览器中,由于 BOM 和 DOM 中的对象是使用 C++以 COM 对象 的方式实现的,而 COM 对象的垃圾收集机制采用的是引用计数策略。在基于引用计数策略的垃圾回收机制中,如果两个对象之间形成了循环引用,那么这两个对象都无法被回收,但循环引用 造成的内存泄露在本质上也不是闭包造成的。 同样,如果要解决循环引用带来的内存泄露问题,我们只需要把循环引用中的变量设为 null 即可。将变量设置为 null 意味着切断变量与它此前引用的值之间的连接。当垃圾收集器下次运 行时,就会删除这些值并回收它们占用的内存。
-
构造函数-通过new关键字方式调用的函数都被认为是构造函数。在构造函数内 this指向新创建的对象object,新创建的对象的prototype被指向构造函数的prototype。如果没有显式的return表达式则隐式的会返回this对象也就是新创建的对象,而如果显式的return了对象,则会返回return 的对象,仅限与对象会这样
js 细节点笔记
于 2020-08-13 09:23:59 首次发布