亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

javascript中對(duì)象的常用方法,深克隆和淺克隆以及凍結(jié),擴(kuò)展,密封三大屬性的區(qū)別

gplane / 2221人閱讀

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

對(duì)象作為引用類型,工作中免不了復(fù)制對(duì)象,下面來看看克隆的方法
Object.assign() 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象。它將返回目標(biāo)對(duì)象。淺克隆:
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深克隆的一種方式,主要方式是把對(duì)象轉(zhuǎn)為JSON字符串,然后再轉(zhuǎn)為對(duì)象
var cloneObj = JSON.parse(JSON.stringify(obj)); 
對(duì)象中有凍結(jié),擴(kuò)展,密封三大屬性,freeze,seal,preventExtensions,來看看3個(gè)屬性的區(qū)別
Object.freeze(obj) 方法可以凍結(jié)一個(gè)對(duì)象,不能修改,新增,刪除任何屬性和值
let freeze1 = {
    a: "1"
};
let freeze2 = Object.freeze(freeze1);
freeze2.a = 2;
console.log(freeze2) //1 
Object.isFrozen(obj) 方法判斷對(duì)象是否被凍結(jié)
console.log(Object.isFrozen(freeze2))   //true
Object.seal(obj) 方法封閉一個(gè)對(duì)象,阻止添加新屬性并將所有現(xiàn)有屬性標(biāo)記為不可配置。當(dāng)前屬性的值只要可寫就可以改變。
let seal = {};
Object.seal(seal);  //封閉對(duì)象
Object.isSealed(obj) 方法判斷一個(gè)對(duì)象是否被密封。
console.log(Object.isSealed({}), "------"); //false
console.log(Object.isSealed(seal), "------"); //true
Object.preventExtensions(obj) 方法讓一個(gè)對(duì)象變的不可擴(kuò)展,也就是永遠(yuǎn)不能再添加新的
Object.isExtensible(obj) 法判斷一個(gè)對(duì)象是否是可擴(kuò)展的是否可以在它上面添加新的屬性。
對(duì)象可枚舉屬性和不可枚舉屬性,一直傻傻分不清,在javascript中,對(duì)象的屬性氛圍可枚舉和不可枚舉之分,屬性的枚舉性主要影響一下三個(gè)函數(shù)的結(jié)果,
for ...in 
Object.keys()
JSON.stringify()

先看一個(gè)例子,創(chuàng)建一個(gè)對(duì)象

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) {         //遍歷無法打印不可枚舉對(duì)象
    console.log("pro:" + pro + ";" + key[pro])
}
 pro:name;KEY    
 pro:constructr;function Person(){
     this.name="KEY"
 }
 pro:jos;student
obj.propertyIsEnumerable(prop) 方法返回一個(gè)布爾值,表示指定的屬性是否可枚舉
console.log(Number.propertyIsEnumerable("parseint")) //false
Object.defineProperties();方法直接在一個(gè)對(duì)象上定義新的屬性或修改現(xiàn)有屬性,并返回該對(duì)象。
Object.defineProperties(obj, props) 
*obj 為源對(duì)象
*props是一個(gè)對(duì)象,里面有configurable,enumerable,value,writable,get,set
*configurable 屬性描述符的類型可以被改變并且該屬性可以從對(duì)應(yīng)對(duì)象中刪除。默認(rèn)false
*enumerable 是否為枚舉屬性  默認(rèn)為false
*value 任意值,默認(rèn)undefined
*writable 可以通過賦值改變  默認(rèn)false
*get 返回value值,默認(rèn)undefinde
*set 設(shè)置value值,默認(rèn)undefine

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

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

每天進(jìn)步一點(diǎn),希望大家喜歡,也希望喜歡的朋友點(diǎn)個(gè)贊,后續(xù)繼續(xù)更新...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/93595.html

相關(guān)文章

  • javascript對(duì)象、類與原型鏈

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

    adam1q84 評(píng)論0 收藏0
  • 淺談 JS 對(duì)象擴(kuò)展、密封凍結(jié)三大特性

    摘要:嘗試刪除一個(gè)密封對(duì)象的屬性或者將某個(gè)密封對(duì)象的屬性從數(shù)據(jù)屬性轉(zhuǎn)換成訪問器屬性,結(jié)果會(huì)靜默失敗或拋出異常嚴(yán)格模式。 擴(kuò)展特性 Object.isExtensible 方法 Object.preventExtensions 方法 密封特性 Object.isSealed 方法 Object.seal 方法 凍結(jié)特性 Object.isFrozen 方法 Object...

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

    摘要:為什么要使用克隆克隆對(duì)象可能包括已經(jīng)修改過的屬性,出來的對(duì)象屬性都還是初始化的值。 為什么要使用克?。? 克隆對(duì)象可能包括已經(jīng)修改過的屬性,new出來的對(duì)象屬性都還是初始化的值。 若直接利用指針指向原有對(duì)象,改變?cè)瓕?duì)象的屬性值時(shí),指針?biāo)笇?duì)象的值也會(huì)改變 clone復(fù)制的對(duì)象與原對(duì)象是相互獨(dú)立存在 如何實(shí)現(xiàn)對(duì)象克隆? 克隆主要分為淺克隆和深克隆 步驟 被復(fù)制類需實(shí)現(xiàn)Cl...

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

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

    CatalpaFlat 評(píng)論0 收藏0
  • JS淺拷貝

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

    xiaoxiaozi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<