對象包含一系列的屬性,這些屬性是無序的,每一個屬性都有一個字符串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
。