摘要:使用小細(xì)節(jié)這幾天遇到一個(gè)坑,講的是保護(hù)對(duì)象的其中一種方法。封閉方法可以讓一個(gè)對(duì)象密封,并返回被密封后的對(duì)象。但是有個(gè)例外,允許非配置屬性從可寫(xiě)狀態(tài)變成只讀狀態(tài),因?yàn)閿?shù)組的屬性總是可寫(xiě)的且不可配置。如果沒(méi)有這個(gè)例外就不能凍結(jié)數(shù)組。
Javascript(Object.seal)&使用小細(xì)節(jié)
這幾天遇到一個(gè)坑,講的是js保護(hù)對(duì)象的其中一種方法。封閉(Sealing)
Object.seal(obj)
Object.seal()
方法可以讓一個(gè)對(duì)象密封,并返回被密封后的對(duì)象。密封對(duì)象是指那些不能添加新的屬性,不能刪除已有屬性,以及不能修改已有屬性的可枚舉性、可配置性、可寫(xiě)性,但可能可以修改已有屬性的值的對(duì)象。
調(diào)用了seal這個(gè)函數(shù),會(huì)把屬性的configurable設(shè)置為false,也就是不能修改他的屬性特性。
不知道各位有沒(méi)有發(fā)現(xiàn)其中有一個(gè)小小的問(wèn)題。configurable明明設(shè)置為false,但是我還是可以修改它的可寫(xiě)性,writable從原來(lái)的true->false。
后來(lái)經(jīng)過(guò)一番查書(shū)之后,才發(fā)現(xiàn)一個(gè)小小的細(xì)節(jié)。
configurable持有一個(gè)布爾值,如果它是false,那么你不能刪除、改變屬性的人和特性,除了value,也不能把它從數(shù)據(jù)屬性轉(zhuǎn)換為訪問(wèn)其屬性,反之亦然,它控制著屬性元數(shù)據(jù)的可寫(xiě)性。但是有個(gè)例外,js允許非配置屬性從可寫(xiě)狀態(tài)變成只讀狀態(tài),因?yàn)閿?shù)組的屬性length總是可寫(xiě)的且不可配置。如果沒(méi)有這個(gè)例外就不能凍結(jié)數(shù)組。
所以如果是一開(kāi)始使用默認(rèn)的可寫(xiě)性writable=true;他是可以被允許在configurable為false的時(shí)候改變成為false的。那這時(shí)候問(wèn)題又來(lái)了, 如果我已經(jīng)顯性設(shè)置了可寫(xiě)性為true呢?
t.foo也是被改變成為false,所以說(shuō)明不管顯隱性聲明可寫(xiě)行,在不可配置的情況下依然可以總是可以被從可讀可寫(xiě)改為只讀。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80311.html
摘要:譯者按使用和,可以禁止重寫(xiě)對(duì)象。引入了一些方法,允許開(kāi)發(fā)者限制對(duì)象重寫(xiě)。不要重寫(xiě)他人的對(duì)象不要重寫(xiě)他人的對(duì)象,這是的黃金法則。如果你修改的是對(duì)象比如,這會(huì)導(dǎo)致非常嚴(yán)重的后果。 譯者按: 使用Object.preventExtensions()、Object.seal()和Object.freeze(),可以禁止重寫(xiě)JavaScript對(duì)象。 譯者:Fundebug 原文:Preve...
摘要:它將返回目標(biāo)對(duì)象。封閉對(duì)象方法判斷一個(gè)對(duì)象是否被密封。為源對(duì)象為修改的屬性名或設(shè)置,同上方法返回一個(gè)給定對(duì)象自身可枚舉屬性的鍵值對(duì)數(shù)組方法返回指定對(duì)象上一個(gè)自有屬性對(duì)應(yīng)的屬性描述符方法判斷兩個(gè)值是否是相同的值。 對(duì)象作為引用類(lèi)型,工作中免不了復(fù)制對(duì)象,下面來(lái)看看克隆的方法 Object.assign() 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象。它將返回目標(biāo)對(duì)象。淺...
摘要:一般來(lái)說(shuō),默認(rèn)情況下,對(duì)象都是可拓展的,我們可以為其屬性進(jìn)行增刪改等操作,也可以更改他們?cè)偷闹赶?,如何讓一個(gè)對(duì)象變得不可拓展呢,我們可以使用提供的幾個(gè)方法,來(lái)保證鎖定的對(duì)象是不可拓展的可以鎖定對(duì)象,設(shè)置對(duì)象的不可拓展,可以阻止為對(duì)象添加新 一般來(lái)說(shuō),默認(rèn)情況下,對(duì)象都是可拓展的,我們可以為其屬性進(jìn)行增刪改等操作,也可以更改他們?cè)偷闹赶颍绾巫屢粋€(gè)對(duì)象變得不可拓展呢,我們可以使用ES...
摘要:等同于構(gòu)造函數(shù)與的用法很相似,幾乎一模一樣。實(shí)例對(duì)象的方法接受一個(gè)字符串作為參數(shù),返回一個(gè)布爾值,表示該實(shí)例對(duì)象自身是否具有該屬性。等同于方法生成的對(duì)象,繼承了它的原型對(duì)象的構(gòu)造函數(shù)。 分類(lèi) Object() 函數(shù) Object 本身是一個(gè)函數(shù),用來(lái)將任意值轉(zhuǎn)為對(duì)象。 如果參數(shù)為空(或者為 undefined 和 null),Object() 返回一個(gè)空對(duì)象。 var obj = Ob...
摘要:也就是說(shuō),屬性控制了屬性描述對(duì)象的可寫(xiě)性??杀闅v性返回一個(gè)布爾值,表示目標(biāo)屬性是否可遍歷運(yùn)算符不管某個(gè)屬性是對(duì)象自身的還是繼承的,都會(huì)返回。上面的寫(xiě)法與定義屬性描述對(duì)象是等價(jià)的,而且使用更廣泛。 屬性描述對(duì)象 概述Object.getOwnPropertyDescriptor()Object.getOwnPropertyNames()Object.defineProperty(),Ob...
閱讀 3307·2021-09-02 15:41
閱讀 2840·2021-09-02 09:48
閱讀 1381·2019-08-29 13:27
閱讀 1169·2019-08-26 13:37
閱讀 844·2019-08-26 11:56
閱讀 2490·2019-08-26 10:24
閱讀 1651·2019-08-23 18:07
閱讀 2625·2019-08-23 15:16