任何人物件都可以被同一環境中執行的**修改。開發人員很可能會意外地修改別人的**,甚至用不相容的功能重寫原生的**。ecmascript解決了這個問題,可以讓開發人員防篡改物件。
注意:一旦把物件定義為防篡改,就無法撤銷。
1.不可擴充套件物件:
在預設情況下,所有的物件都是可以擴充套件的。也就是說,任何時候都可以向物件中新增屬性和方法。使object.prevent
extensions()方法可以改變這個行為,讓你不能再給物件新增屬性和方法。
var person=
object.
preventextensions
(person)
;person.age=
"18"
;console.
log(person.age)
;//undefined
console.
log(object.
i***tensible
(person));
//false
在使用object.preventextensions()方法後,在非嚴格模式下,給物件新增新成員會導致靜默失敗,因此person.age
是undefined。而在嚴格模式下,嘗試給不可擴充套件的物件新增新成員會導致丟擲錯誤。
雖然不能給物件新增新成員,但已有的成員則不受影響。還可以修改和刪除已有的成員。使用object.i***tensible()方法可以確定物件是否可以擴充套件。
2.密封的物件
密封的物件不可擴充套件,也不能刪除屬性和方法,屬性值可以修改。
var person=
object.
seal
(person)
;person.age=
"18"
;console.
log(person.age)
;//undefined
delete person.name;
console.
log(person.name)
;//"遠方"
console.
log(object.
i***tendsible
(person));
//false
console.
log(object.
issealed
(person));
//true
這是在非嚴格模式下的顯示,在嚴格模式下,嘗試新增或刪除物件都會導致丟擲錯誤。可以使用object.issealed()方法確定物件是否被密封。
3.凍結的物件
凍結的物件即不可擴充套件,又是密封的,而且物件資料屬性的[[writable]]特性會被設定為false。
var person=
object.
freeze
(person)
;person.age=
"18"
;console.
log(person.age)
;//undefined
delete person.name;
console.
log(person.name)
;//"遠方"
person.name=
"星星";
console.
log(person.name)
;//"遠方"
console.
log(object.
i***tendsible
(person));
//false
console.
log(object.
issealed
(person));
//true
console.
log(object.
isfrozed
(person));
//true
在嚴格模式下,同樣會丟擲錯誤。 JavaScript中防篡改物件
測試 chrome 前言 ecmascript5中增加了指定物件的行為,在這之前我們先看看如何手動設定屬性的 configurable writable enumerable value get set 這些通過字面意思大家應該也能理解的,就不多說了,下面舉乙個例子 要用到物件的.definepro...
防篡改物件
答 不可擴充套件物件 object.preventextensions 這樣就不能向物件中新新增屬性和方法了 不可擴充套件量一級保護措施。判斷 object.i tensible 方法 使用這個方法可以確定物件是否為可篡改,如果可篡改,則返回true,相反返回false。密封的物件 object.s...
js 防篡改物件
簡單介紹一下js的防篡改物件 1 不可擴充套件物件 不能新增,可以修改和刪除 預設情況下,所有物件都是可擴充套件的。即任何時候我們都可以為物件新增屬性和方法。但使用object.preventextensions 方法可以改變這一預設行為,即不能再為物件新增新的屬性和方法,但是仍然可以修改和刪除已有...