对象标签有三种:proto、class和extensible。前端
1、proto标签app
例如我新建了一个person对象,那么其__proto__则指向Person.prototype,而后Person.prototype的__proto__则指向Object.prototype,Object.prototype的__proto__则指向null,从而造成完整的原型链。学习
2、class标签this
上图的要点为:prototype
1. Object.prototype.toString.call(o)则是至关于o.toString(),o做为this传入,跟apply的用法很像。3d
2.slice(8,-1)便是截出第8个字符到最后一个字符(不包括最后一个字符)的字符串,旨在截出[object Xxx]中的Xxx。对象
3.typeof new Number(1)返回object,可是使用toString返回的是Number,toString更为精准一些。(typeof null返回object,而toString则返回null。)blog
3、extensible标签原型链
上图的要点为:字符串
1.用isExtensible判断是否可扩展属性,用preventExtensions来阻止扩展,此时原对象属性的属性标签不受影响。
2.用isSealed判断是否被封印,用seal来封印对象,此时原对象的属性标签变成不可配置了。
3.用isFrozen判断是否被冻结,用freeze来冻结对象,此时原对象的属性标签变成不可写且不可配置了。
4.以上三种操做对属性标签的影响程度一步步地加深,可是对对象的操做不会影响其原型链(prototype chain)前端部分的状况。
接下来咱们学习下对象序列化。
上图的要点为:
1.把对象变为字符串的过程称为对象序列化,序列化后对象的key会加上双引号,对象的花括号先后都会加上双引号。
2.若对象属性为undefined,则序列化后属性便去掉了。若属性值为NaN或Infinity(无穷),则序列化后属性会变为null。若属性值为Date对象,则序列化后会变为UTC格式。
上图的要点为:对象内部加上toJSON方法,从而自定义序列化过程。
上图的要点为:
1.obj.toString()可直接输出[object Object]字符串,至关于Object.prototype.toString.apply/call(obj)。
2.可在对象内部重写toString和valueOf方法。
3.+obj首先会调用valueOf,看可否变成非对象,若不能,则调用toString,若仍不能转成非对象,则报错。