javascript 物件的防篡改幾種辦法

2021-09-13 18:07:14 字數 2410 閱讀 9503

1、不可擴充套件物件

預設情況下物件都是可以擴充套件的,也就是說,任何時候都可以向物件中新增屬性和方法。現在使用object.preventextensions(object)方法可以改變這個行為,讓你不能再給物件新增屬性和方法。例如:

var person=;

object.preventextensions(person);

person.age=13;

console.log(person.age);///undefine

雖然不能給物件新增新成員,但是已有的成員則絲毫不受影響,你仍然可以修改和刪除自己的已有的成員。另外使用i***tensible()方法還可以確定物件是否可以擴充套件。例如:

var person=;

alert(object.i***tensible(person));//true

object.preventextensions(person);

alert(object.istextensible(person));//false

2、密封的物件

ecmascript 5 為物件定義的第二個保護級別是密封物件。使用object.seal(object)方法可以將物件改為密封物件。密封物件不可擴充套件,而且已有成員的[[configurable]]特性將被設定為false。這就意味著不能刪除屬性和方法,因為不能使用object.defineproperty()把資料修改為訪問其屬性,或者相反。但是屬性值是可以修改的

var person = ;

object.seal(person);

person.age=12;

console.log(person.age);//undefine

delete person.name;

console.log(person.name);//tom

person.name="jack";

alert(person.name);//jack

使用object.issealed()方法可以確定物件是否被密封了,因為被密封的物件也是不可擴充套件的,所以使用object.istextensible()檢測密封物件也會返回false(即不可擴充套件)

var person = ;

alert(object.i***tensible(person));///true,可擴充套件

alert(object.issealed(person));false,未加密

object.seal(person);

alert(object.i***tensible(person));///false,不可擴充套件

alert(object.issealed(person));true,已經加密

3、凍結的物件

最嚴格的的防止篡改級別的是凍結物件,凍結的物件既不可擴充套件,又是密封的,而且物件的資料屬性的[[writable]]特性會被設定為false,如果定義set函式,訪問器屬性仍然是可寫的,現在使用object.freeze(object)方法可以將物件改為凍結的物件。

var person=;

object.freeze(person);

person.age=12;

alert(person.age);//undefine

delete person.name;

alert(person.name);//tony

person.name = 'jack';

alert(person.name);//tony

使用object.isfrozen()方法可以檢測物件是否是凍結物件,因為凍結物件既是不可擴充套件物件,又是密封的物件,所以用i***tensible()

和object.istextensible()檢測凍結物件將分別返回false和true,

var person = ;

alert(object.i***tensible(person));///true,可擴充套件

alert(object.issealed(person));false,未加密

alert(object.isfrozen(person));false,未加密

object.seal(person);

alert(object.i***tensible(person));///false,不可擴充套件

alert(object.issealed(person));true,已經加密

alert(object.isfrozen(person));true,已經凍結

JavaScript防篡改物件

任何人物件都可以被同一環境中執行的 修改。開發人員很可能會意外地修改別人的 甚至用不相容的功能重寫原生的 ecmascript解決了這個問題,可以讓開發人員防篡改物件。注意 一旦把物件定義為防篡改,就無法撤銷。1.不可擴充套件物件 在預設情況下,所有的物件都是可以擴充套件的。也就是說,任何時候都可以...

JavaScript中防篡改物件

測試 chrome 前言 ecmascript5中增加了指定物件的行為,在這之前我們先看看如何手動設定屬性的 configurable writable enumerable value get set 這些通過字面意思大家應該也能理解的,就不多說了,下面舉乙個例子 要用到物件的.definepro...

javascript函式防抖

函式防抖是頻繁發生的情況下,當有足夠的空閒時間,才會執行 一次,是優化高頻率執行 的一種手段。實際開發中會遇到頻發觸發事件的情況,比如resize,scroll,mousemove事件。事件觸發 n 秒後執行,如果在這 n 秒內再次觸發,則以新的事件時間為準,n 秒後執行。無論觸發多少次,都要等到最...