备忘录
模拟实现new返回时应该做判断:new操作符会在构造函数有返回值且这个返回值类型为引用类型的时候返回这个值,而不是返回我们的构造出的对象
typeof null === 'object'为true也会让人感到头痛,这是在JavaScript初版就流传下来的bug,后面由于修改会造成大量的兼容问题就一直没有被修复
Array.__proto__ -> Function.prototype(是一个函数对象function) 而 [].__proto__-> Array.prototype(对象obj)所以: Array.prototype.__proto__ ->Object.prototype
NaN!==NaN的,很多时候需要做特殊处理,比如模拟实现Set的时候,我们用indexOf去取NaN的索引时是取不到的,可以添加symbol来处理
symbol变量用作对象的键只能采用obj[]或
let obj = {
[symbol]
}
function有length,值为参数的个数
WeakMap只接受对象作为键名(null除外),不接受其他类型的值作为键名。WeakMap的键名所指向的对象,不计入垃圾回收机制
对象是不可迭代的,for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用for-in循环(这也是它的本职工作)或内建的Object.keys()方法
setInterval方法的返回值什么?
它返回一个唯一的id。 此id可用于使用clearInterval()函数清除该定时器。
变量名不应该以数字(0-9)开头。它们必须以字母或下划线开头。例如,123name是一个无效的变量名,但ame123是一个有效的变量名。
用 isNaN() 来判断一个值是否是数字。原因是 NaN 与所有值都不相等,包括它自己。
udefined为变量正常的数据类型,不是报错(声明变量没有赋值,或者是对象没有的键),而not defined是指变量没有定义却使用了,是报错。
in 运算符:如果指定的属性在指定的对象或其原型链中,则in 运算符返回true。hasOwnPropert只能在对象自身的属性上
写一些高阶函数返回时间监听函数时注意绑定this,如防抖函数等
[].cancat(1,[2])
可以接受多个数组或者数字来连接,返回的是浅拷贝,可以结合扩展运算符来扁平化一个数组编程=逻辑 + 数据结构 + 算法。