-
object 和number,string对比会先转换成原始对象
boolean会先转换成number'
查看全部 -
在包装对象被使用完后,会被销毁,所以str.t事实上变成了new string(str).t这个t在包装类型中是不存在的,所以结果是undefined
查看全部 -
,运算符取最后一个
查看全部 -
extensible标签表示对象的扩展性
查看对象是否可扩展:Object.isExtensible(obj)
阻止对象扩展:Object.preventExtensions(obj)
如果使用了Object.preventExtensions(obj), obj的属性的标签并没有改变
隐藏对象:Object.seal(obj)
使得对象不可扩展并且把对象属性的标签中的configurable改为false
对象是否被隐藏: Object.isSealed(obj)
冻结对象: Object.freeze(obj)
使得对象不可扩展并且把对象属性的标签中的configurable和writable都改为false
对象是否被冻结: Object.isFrozen(obj)
最后要注意的一点就是,对某一个对象做这些修改的操作,并不影响原型链!
查看全部 -
class标签表示对象的类型
我们无法直接获得class标签
但是可以通过Object.prototype.toString.call(this)的方法获得一个数组,数组的内容就是对象的类型
本页的例题中
getType无论传入的是数字还是布尔值,都会被当成对象来看待
这是因为Object.prototype.toString会先把数字或者布尔值转换为对象
查看全部 -
不仅是对象的属性有标签
对象本身也有标签
[[proto]]
[[class]]
[[extensible]]
查看全部 -
属性标签的修改规则:(如图)
补充:
只要configurable为true,基本上什么都可以修改
任何情况下都允许将writable标签由true改为false
查看全部 -
同时对一个对象定义多个属性的标签可以使用
Object.defineProperties(对象, {
property1 : {},
property2 : {},
property3 : {}
});
的方法
查看全部 -
通过
Object.keys(对象)
的方法来查找某个对象里的属性
如果某个属性的enumerable值为false
则Object.keys(对象)将不会输出这个属性
查看全部 -
使用
Object.getOwnPropertyDescriptor(对象,属性)
的方法来查看对象内某个属性的标签的情况
如果属性不存在,返回undefined,存在则返回标签的情况。
设置属性的标签
Object.defineProperty(obj, 'name', {
configurable : true,
writable : false,
enumerable : true,
value : "Blueine"
});
查看全部 -
清晰明了
查看全部 -
在包装对象被使用完后,会被销毁,所以str.t事实上变成了new string(str).t这个t在包装类型中是不存在的,所以结果是undefined
查看全部 -
当把一个基本类型尝试以对象的方式去使用的时侯,javascript会先创建一个基本类型对应的包装类型对象以支持使用,所以在str.length底层是new string<str>.length所以结果是6,而str.t=6事实上是new String(6).t=6,
查看全部 -
不只是上述foo.prototype.z有get方法的情况无法通过赋值修改原型链上z的值
如果新定义一个对象,对这个对象添加一个属性,并设置它的值为1
由于没有设置这个属性的其他标签,所以writable标签为false,表示这个属性不可修改
当我们用Object.create()的方法创建一个新对象时
新对象的proto指向传入Object.create()的形参
假设传入的形参是我们前面提到的那个对象
那么在新对象的基础上可以引用到原型链的属性
但是由于writable为false
企图通过新对象对原型链的属性赋新值是不可以的
除非是在新对象上使用Object.defineProperty()来新建一个新对象自己的属性
(但是始终要注意,Object.defineProperty()里面属性标签的默认值都是false!)
查看全部 -
假设原型链上有某个属性,而由构造器构造的对象没有这个属性
即function foo() {}; var obj = new foo();
foo.prototype有属性z, z in foo.prototype //true
而obj没有直接拥有属性z, obj.hasOwnProperty(z) //false
如果原型链上的属性具有get方法
即Object.defineProperty(foo.prototype, 'z', {get: function() {return 1;} })
那么z的值就是1
当我们试图给foo.prototype的z赋值时
js解释器并不会在obj里新建一个属性z (按道理,没有get时obj会在自己的属性里新建一个z)
也就是说,这个时候, foo.prototype.z由于有get方法而我们无法直接修改z的值
想要对obj添加z这个属性,而不是使用原型链上的foo.prototype.z
就要使用
Object.defineProperty(obj, 'z', {value: 100, configurable: true})
的方法
在我们删除了obj里的z属性之后
再次运行obj.z我们得到的还是原型链上的foo.prototype.z
查看全部
举报