对象包含一系列的属性,这些属性是无序的,每一个属性都有一个字符串key和对应的
value
。后端
对象中的每一个属性有不少属性标签,提供每一个属性的可访问权限,好比:get
,set
方法,是否可选,可删除,可枚举等函数
对象的class
标签,表示该对象所属种类,extensible
标签,表示该对象是否容许增长新的属性prototype
原型指向 Object.prototype
**不管是用数字1,仍是字符串1,{}空对象,或者带有x属性的对象 做为key
,js都会
调用toString
,转换成字符串
3d
以参数做为原型
code
obj.x==obj["y"];
obj.y
未定义,因此不能去定义obj.y.z
getOwnPropertyDescriptor()
获取对象属性的全部标签var
定义的局部,全局变量,函数声明不能被删除 ,隐式建立局部变量能够被删除,在eval
定义的变量也能够被删除in
注意原型链问题hasOwnProperty('toString');
obj.propertyIsEnumerable('toString');
//返回false,该方法判断属性是否能够枚举enumerable
默认为true
,可是Object.defineProperty
建立的变量默认为false
!=
和!==
的区别语法:
get +属性名(){},//与其余属性之间用","隔开 set +属性名(val){}
val=+val
一元操做符,将val变成一个数字
对象
当对象obj没有z属性时,在原型链上查找有定义get``set
方法时,obj.z=10
赋值不能成功,赋值时会用原型上的get``set
方法
若想要给当前对象添加z属性时,应使用Object.defineProperty()
当对象obj没有z属性时,在原型链上查找属性x的writable=false
,obj.z=10
赋值也不能成功,若想要给当前对象添加z属性时,应使用Object.defineProperty()
blog
Object.defineProperty
Object.keys
只保存enumerable:true
的属性值Object.definePropertys
总结
ip
实现原型链,Object.protoTypeOf
获取对象的原型原型链
一般用Object.prototype.toString
方式获取,Object.prototype.toString
方法会将参数变为对象再作处理
字符串
Object.isExtensible([obj])
检验对象是否能够扩展
Object.preventExtensions([obj])
阻止对象被扩展
Object.seal([obj])
使对象的属性不能被配置 即从configurable的属性标签设定为false
Object.isSealed([obj])
判断对象是否为不可配置
Object.freeze([obj])
将对象的configurable 属性标签以及writable属性标签设定为false
Object.isFreozen([obj])
判断对象是否被冻结,能够把整个原型链全都冻结
JSON.stringify(obj)
,若是obj = {a:undefined,b:1}
,那么序列化以后的对象里面不包含a属性NaN
或者Infinity
时,序列化的结果是null
;当你的属性值是new Date()
,序列化的结果是UTC的时间格式
后端返回JSON
数据,则用JSON.parse
来解析成为js的对象;合法的JSON的属性必须用双引号引发来
自定义对象的toString
方法,转化成字符串时使用
类型转换时,自动调用toString
方法或者valueOf
方法
自定义对象的valueOf
方法,转化成基本类型时自动调用的函数
当toString
和valueOf
同时存在,先寻找valueOf
,若是不存在或不合法的值(为对象),则再寻找toString
。