对象(Object)是引用类型,在使用过程中会遇到浅拷贝和深拷贝的问题。
let a = { name: 'FE' }
let b = a
b.name = 'EF'
console.log(a.name) // EF
只有当加法运算时,其中一方是字符串类型,就会把另一个也转为字符串类型。其 他运算只要其中一方是数字,那么另一方就转为数字。并且加法运算会触发三种类型转 换:将值转换为原始值,转换为数字,转换为字符串。
1 + '1' // '11'
2 * '2' // 4
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'
对于加号需要注意这个表达式 'a' + + 'b'
'a' + + 'b' // -> "aNaN"
// 因为 + 'b' -> NaN
// 你也许在一些代码中看到过 + '1' -> 1
每个函数都有 prototype
属性,除了 Function.prototype.bind()
,该属性指向
原型。
每个对象都有 __proto__
属性,指向了创建该对象的构造函数的原型。其实这个
属性指向了 [[prototype]]
,但是[[prototype]]
是内部属性,我们并不能访问到,
所以使用_proto_
来访问。
对象可以通过 __proto__
来寻找不属于该对象的属性,__proto__
将对象连接起
来组成了原型链。