国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript中對象的常用方法,深克隆和淺克隆以及凍結,擴展,密封三大屬性的區別

gplane / 2176人閱讀

摘要:它將返回目標對象。封閉對象方法判斷一個對象是否被密封。為源對象為修改的屬性名或設置,同上方法返回一個給定對象自身可枚舉屬性的鍵值對數組方法返回指定對象上一個自有屬性對應的屬性描述符方法判斷兩個值是否是相同的值。

對象作為引用類型,工作中免不了復制對象,下面來看看克隆的方法
Object.assign() 方法用于將所有可枚舉屬性的值從一個或多個源對象復制到目標對象。它將返回目標對象。淺克隆:
const obj1 = {
    a: 1,
    b: 2,
    title: {
        name: "張三"
    }
};
const obj2 = Object.assign({}, obj1);
console.log(obj2); //{ a: 1, b: 2 ,title:{name:"張三"}}
obj1.title.name = "李四";  //修改obj1的值,再來打印看下obj2的值
console.log(obj2)   //{ a: 1, b: 2,title:{name:"李四"} }
console.log(obj1)  //{ a: 1, b: 2,title:{name:"李四"} }
Object深克隆的一種方式,主要方式是把對象轉為JSON字符串,然后再轉為對象
var cloneObj = JSON.parse(JSON.stringify(obj)); 
對象中有凍結,擴展,密封三大屬性,freeze,seal,preventExtensions,來看看3個屬性的區別
Object.freeze(obj) 方法可以凍結一個對象,不能修改,新增,刪除任何屬性和值
let freeze1 = {
    a: "1"
};
let freeze2 = Object.freeze(freeze1);
freeze2.a = 2;
console.log(freeze2) //1 
Object.isFrozen(obj) 方法判斷對象是否被凍結
console.log(Object.isFrozen(freeze2))   //true
Object.seal(obj) 方法封閉一個對象,阻止添加新屬性并將所有現有屬性標記為不可配置。當前屬性的值只要可寫就可以改變。
let seal = {};
Object.seal(seal);  //封閉對象
Object.isSealed(obj) 方法判斷一個對象是否被密封。
console.log(Object.isSealed({}), "------"); //false
console.log(Object.isSealed(seal), "------"); //true
Object.preventExtensions(obj) 方法讓一個對象變的不可擴展,也就是永遠不能再添加新的
Object.isExtensible(obj) 法判斷一個對象是否是可擴展的是否可以在它上面添加新的屬性。
對象可枚舉屬性和不可枚舉屬性,一直傻傻分不清,在javascript中,對象的屬性氛圍可枚舉和不可枚舉之分,屬性的枚舉性主要影響一下三個函數的結果,
for ...in 
Object.keys()
JSON.stringify()

先看一個例子,創建一個對象

function Person() {
    this.name = "KEY"
}

Person.prototype = {
    constructr: Person,
    jos: "student"
};

var key = new Person();
Object.defineProperty(key, "sex", {
    value: "female"
})
console.log(key.sex, "------") //female ------  直接訪問可以獲取的key.sex
for (var pro in key) {         //遍歷無法打印不可枚舉對象
    console.log("pro:" + pro + ";" + key[pro])
}
 pro:name;KEY    
 pro:constructr;function Person(){
     this.name="KEY"
 }
 pro:jos;student
obj.propertyIsEnumerable(prop) 方法返回一個布爾值,表示指定的屬性是否可枚舉
console.log(Number.propertyIsEnumerable("parseint")) //false
Object.defineProperties();方法直接在一個對象上定義新的屬性或修改現有屬性,并返回該對象。
Object.defineProperties(obj, props) 
*obj 為源對象
*props是一個對象,里面有configurable,enumerable,value,writable,get,set
*configurable 屬性描述符的類型可以被改變并且該屬性可以從對應對象中刪除。默認false
*enumerable 是否為枚舉屬性  默認為false
*value 任意值,默認undefined
*writable 可以通過賦值改變  默認false
*get 返回value值,默認undefinde
*set 設置value值,默認undefine

var defind = {};
Object.defineProperties(defind, {
    "v1": {
        value: "12"
    }
});
console.log(defind.v1) //12
Object.defineProperty() 方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性, 并返回這個對象。
Object.defineProperty(obj,name, prop)  
*obj 為源對象  name為修改的屬性名或設置,prop同上

Object.defineProperty(defind, "key", {
    enumerable: false,
    configurable: false,
    writable: false,
    value: "static"
});
Object.entries() 方法返回一個給定對象自身可枚舉屬性的鍵值對數組
Object.getOwnPropertyDescriptor(obj, prop) //方法返回指定對象上一個自有屬性對應的屬性描述符
console.log(Object.getOwnPropertyDescriptor(freeze1, "a"));
{ value: "1",
 writable: false,
enumerable: true,
 configurable: false }
Object.is(value1, value2)方法判斷兩個值是否是相同的值。
console.log(Object.is({}, {})); //false
console.log(Object.is([], {})); //false
console.log(Object.is([], [])); //false
obj.hasOwnProperty(prop) 檢查對象有沒有該屬性
var o = {
    prop: "exists"
};
console.log(o.hasOwnProperty("prop"));             // 返回 true
console.log(o.hasOwnProperty("hasOwnProperty"));   // 返回 false

每天進步一點,希望大家喜歡,也希望喜歡的朋友點個贊,后續繼續更新...

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93595.html

相關文章

  • javascript對象、類與原型鏈

    摘要:下面定義一個構造函數不過這樣寫這個函數,每個對象都會包括一部分,太浪費內存。原型鏈與繼承在學習原型鏈之前我們一定要區分清楚是構造函數的屬性,而是對象的屬性。但對象形式不等于基本類型。用來判斷對象是否某個構造函數的實例。 js是一個基于對象的語言,所以本文研究一下js對象和類實現的過程和原理。 對象的屬性及屬性特性 下面是一個對象的各個部分: var person = { name:...

    adam1q84 評論0 收藏0
  • 淺談 JS 對象擴展密封凍結三大特性

    摘要:嘗試刪除一個密封對象的屬性或者將某個密封對象的屬性從數據屬性轉換成訪問器屬性,結果會靜默失敗或拋出異常嚴格模式。 擴展特性 Object.isExtensible 方法 Object.preventExtensions 方法 密封特性 Object.isSealed 方法 Object.seal 方法 凍結特性 Object.isFrozen 方法 Object...

    ChristmasBoy 評論0 收藏0
  • JAVA面試題(16)

    摘要:為什么要使用克隆克隆對象可能包括已經修改過的屬性,出來的對象屬性都還是初始化的值。 為什么要使用克隆? 克隆對象可能包括已經修改過的屬性,new出來的對象屬性都還是初始化的值。 若直接利用指針指向原有對象,改變原對象的屬性值時,指針所指對象的值也會改變 clone復制的對象與原對象是相互獨立存在 如何實現對象克隆? 克隆主要分為淺克隆和深克隆 步驟 被復制類需實現Cl...

    JouyPub 評論0 收藏0
  • js對象詳解(JavaScript對象度剖析,度理解js對象)

    摘要:對象詳解對象深度剖析,深度理解對象這算是醞釀很久的一篇文章了。用空構造函數設置類名每個對象都共享相同屬性每個對象共享一個方法版本,省內存。 js對象詳解(JavaScript對象深度剖析,深度理解js對象) 這算是醞釀很久的一篇文章了。 JavaScript作為一個基于對象(沒有類的概念)的語言,從入門到精通到放棄一直會被對象這個問題圍繞。 平時發的文章基本都是開發中遇到的問題和對...

    CatalpaFlat 評論0 收藏0
  • JS淺拷貝

    摘要:引用類型之所以會出現深淺拷貝的問題,實質上是由于對基本類型和引用類型的處理不同。另外方法可以視為數組對象的淺拷貝。上面描述過的復雜問題依然存在,可以說是最簡陋但是日常工作夠用的深拷貝方式。 一直想梳理下工作中經常會用到的深拷貝的內容,然而遍覽了許多的文章,卻發現對深拷貝并沒有一個通用的完美實現方式。因為對深拷貝的定義不同,實現時的edge case過多,在深拷貝的時候會出現循環引用等問...

    xiaoxiaozi 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<