1.object.is()
用來比較兩個值是否嚴格相等,與嚴格比較運算子(===)的行為基本一致
object.is('foo', '
foo')//
true
object.is
({}, {})
//false
不同之處只有兩個:一是+0
不等於-0
,二是nan
等於自身。
+0 === -0//true
nan === nan //
false
object.
is(+0, -0) //
false
object.is(nan, nan) //
true
2.object.assign()
用於物件的合併,將源物件的所有可列舉屬性,複製到目標物件(target)。
const target = ;const source1 = ;
const source2 = ;
object.assign(target, source1, source2);
target
//
object.assign方法的第乙個引數是目標物件,後面的引數都是源物件。
注意,如果目標物件與源物件有同名屬性,或多個源物件有同名屬性,則後面的屬性會覆蓋前面的屬性。
const source1 = ;const source2 = ;
object.assign(target, source1, source2);
target
//
object.assign拷貝的屬性是有限制的,只拷貝源物件的自身屬性(不拷貝繼承屬性),也不拷貝不可列舉的屬性。屬性名為symbol值的屬性,也會被object.assign拷貝。
object.assign方法實行的是淺拷貝,而不是深拷貝。也就是說,如果源物件某個屬性的值是物件,那麼目標物件拷貝得到的是這個物件的引用
(3)陣列的處理
object.assign可以用來處理陣列,但是會把陣列視為物件。
object.assign([1, 2, 3], [4, 5])//
[4, 5, 3]
上面**中,object.assign把陣列視為屬性名為0、1、2的物件,因此原陣列的0號屬性4覆蓋了目標陣列的0號屬性1.
(4)取值函式的處理
object.assign只能進行值的複製,如果要複製的值是乙個取值函式,那麼將求值後再複製。
const source =};const target ={};
object.assign(target, source)
//
上面**中,source物件的foo屬性是乙個取值函式,object.assign不會複製這個取值函式,只會拿到值以後,將這個值複製過去。
3.object.getownpropertydescriptors()
返回指定物件所有自身屬性(非繼承屬性)的描述物件。
也就是返回乙個物件,所有原物件的屬性名都是該物件的屬性名,對應的屬性值就是該屬性的描述物件。
const obj =};object.getownpropertydescriptors(obj)//,
//bar:
// }
注意:object.assign方法總是拷貝乙個屬性的值,而不會拷貝它背後的賦值方法或取值方法。該方法可以解決object.assign()無法正確拷貝get屬性和set屬性的問題。
要配合object.defineproperties()方法,就可以是實現正確拷貝了。
4._proto_屬性,
用來讀取或設定當前物件的prototype物件。(不推薦使用)
object.setprototypeof()
(寫操作)、object.getprototypeof()
(讀操作)、object.create()
(生成操作)代替。_proto_呼叫的是object.prototype._proto_
5.object.setprototypeof()該方法的作用與_proto_相同,用來設定乙個物件的prototype物件,返回引數物件本身。
//格式object.setprototypeof(object, prototype)
該方法等同於下面的函式:
function setprototypeof(obj, proto)
例子:
let proto ={};let obj = ;
object.setprototypeof(obj, proto);
proto.y = 20
;proto.z = 40
;obj.x
//10
obj.y //
20obj.z //
40
將proto物件設為obj物件的原型,所以從obj物件可以讀取proto物件的屬性。//如果第乙個引數不是物件,會自動轉為物件。但是由於返回的還是第乙個引數,所以這個操作不會產生任何效果。
所以如果第乙個引數是undefined或null,就會報錯。
5.object.getprototypeof()
該方法與object.setprototype方法配套,用於讀取乙個物件的原型物件。
object.getprototypeof(obj);
6.object.keys()
返回乙個陣列,成員是引數物件自身的(不含繼承)所有可遍歷屬性的鍵名
var obj = ;object.keys(obj)
//["foo", "baz"]
7.object.values()
返回乙個陣列,成員是引數物件自身的(不含繼承的)所有可遍歷屬性的鍵值。
const obj = ;object.values(obj)
//["bar", 42]
陣列的結果從小到大排序。object.values(obj)會過濾屬性名為symbol值的屬性
object.create
方法的第二個引數新增的物件屬性,如果不顯式宣告,預設是不可遍歷的,屬性描述物件的enumerable
預設是false.
8.object.create()來建立乙個新物件,使用現有的物件來提供新建立物件的_proto_.
語法:
object.create(proto[, propertiesobject])
proto:新建立物件的原型物件
propertiesobject:是物件的屬性描述符,可選。
返回值:
乙個新物件,帶著指定的原型物件和屬性
8.object.enteries()
返回乙個陣列,成員是引數物件自身的(不含繼承)所有可遍歷屬性的鍵值對陣列。
const obj = ;object.entries(obj)
//[ ["foo", "bar"], ["baz", 42] ]
除了返回值不一樣,該方法的行為與object.values基本一致。
如果原物件的屬性名是乙個symbol值,該屬性會被忽略。
object.entries的基本用途是遍歷物件的屬性。
9.object.fromentries()
object.fromentries()方法是object.entries()的逆操作,用於將乙個鍵值對陣列轉為物件。
object.fromentries([['foo', '
bar'
], [
'baz
', 42]])
//
原型物件新增方法
在建構函式中為了避免建立多個物件,造成方法的重複建立,我們一般在原型物件上建立方法 如student.prototype.method function 但這種方法僅適用於物件的方法較少時,如果物件方法有很多,就需要不斷重複 類似student.prototype.method function.這...
給JS物件新增擴充套件方法
如何在js中像c 語法一樣,呼叫str.trim 呢?在js中string物件自己也有trim方法,可通過str.trim 實現 在jquery中jquery物件也封裝了trim方法,可通過 trim str 實現 可是對於trimstart,trimend的方法,js的string物件並沒有對應方...
Python中向物件動態新增方法
定義乙個類 class cat object pass 例項話乙個cat物件 c cat 向類中動態新增屬性 c.color white print c.color 結果為 white如果依照相同的方法新增方法,則 定義乙個類 class cat object pass 例項話乙個cat物件 c c...