詳情參考
js原生提供object建構函式。js中所有的物件都是object的例項。
定義乙個物件最簡單的就是var obj = {};
es6屬性和方法允許簡寫。物件的super屬性只能用在簡寫的方法中,其他的地方都會報錯。
let a = 5;let obj =
};
屬性可以使用訪問器表示。訪問器的使用場合一般是: 屬性的值依賴物件內部資料。
var obj =,set v(value)
}obj.v; //5
obj.v = 10;
obj.v;
//15
物件要求屬性名必須是字串,如果不是字串,js引擎會自動將其轉為字串。
var obj=//var obj =
⚠️如果屬性名不是有效的變數識別符號,字串不能省略。
es6
1)屬性名表示式,允許屬性名通過用表示式準備。內有字串說明是屬性名,沒有字串說明是變數。
var obj =}
2)新增symbol型別的屬性名
name屬性返回函式的名稱。
.bind()的函式會返回「bond 函式名」;匿名函式"anoymous";物件的方法名為symbol("函式名")返回引號中函式名
遍歷規則:
1)先遍歷數字屬性,從小到大
2)遍歷字串屬性,按照時間從早到晚(push的最早的)
3)遍歷symbol屬性,按照時間從早到晚
屬性遍歷方法:
1)for...in 遍歷原型和自身的可列舉屬性(不含symbol)
2)object.keys() --返回陣列,陣列元素是自身可列舉屬性(不含symbol)
3)object.getownpropertynames 遍歷自身可列舉和不可列舉屬性(不含symbol)
es64)object.getownpropertysymbols()遍歷自身的symbol屬性
5)reflect.ownkeys() 遍歷自身的所有屬性
值遍歷方法
1)object.values()---返回陣列
2)object.entries()---返回二維陣列
ps:object.fromentries()將map轉為物件;或者object.entries()遍歷的結果(二維陣列)轉為物件
es6
1)相同點: 兩者相當於另一種形式的遍歷,針對的都是可列舉型別
都是{},因為自動轉換生成的物件的屬性都是不可遍歷的屬性或者是{}{}
-- 不同點:前者的target引數不能是null和undefined; ...可以是null和undefined
⚠️:...(表示式) ---擴充套件運算子可以跟表示式
2)物件的拷貝
淺拷貝--遍歷拷貝第一層屬性。如果屬性值是物件,則拷貝的是物件的位址。
⚠️:建立了乙個新物件,並將第一層屬性拷貝過去。
let a = object.assign({},obj); //a != obj
let a = ; //
a != obj
let a = obj; a=== obj;
物件的完整轉殖規則:1.原型物件相同;2.自身屬性相同
object.assign(object.create(object.getprototypeof(obj)),obj)
object.create(object.getprototypeof(obj), object.getownpropertydescriptors(obj))
功能基本和===相同。
區別: 1)object.is(nan, nan) --true 2) object.is(+0, -0) -- false
1)prototype屬性是建構函式的屬性,例項物件沒有該屬性
2) __proto__例項物件的屬性,表示該例項物件的原型物件
2)讀取,設定原型物件
---1.__proto__瀏覽器例項物件的私有屬性,可以讀取,寫入,但是不建議使用
---2.getprototypeof(),setprototypeof
---3.object.create(原型物件,屬性描述物件)⚠️如果屬性預設,預設false, value預設undefine
Object物件的相關方法
object.getprototypeof方法返回引數物件的原型。這是獲取原型物件的標準方法。var f function var f new f object.getprototypeof f f.prototype true下面是幾種特殊物件的原型。空物件的原型是 object.prototyp...
列印object物件
一般情況在測試js時,如果介面返回的資料是object物件。如果不知道這個物件裡面具體的屬性就取值容易得到undefined。哪麼怎麼知道乙個object物件裡面到底是什麼東西呢。答案就是將其轉換成string字串列印出來。function obj2string o if typeof o obje...
物件導向 object
object 是所有物件的直接後者間接父類,傳說中的上帝。該類中定義的肯定是所有物件都具備的功能。object類中已經提供了對物件是否相同的比較方法。如果自定義類中也有比較相同的功能,沒有必要重新定義。只要沿襲父類中的功能,建立自己特有比較內容即可。這就是覆蓋。class demo extends ...