JavaScript防篡改物件

2021-09-01 12:35:22 字數 1988 閱讀 6278

任何人物件都可以被同一環境中執行的**修改。開發人員很可能會意外地修改別人的**,甚至用不相容的功能重寫原生的**。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 方法可以改變這一預設行為,即不能再為物件新增新的屬性和方法,但是仍然可以修改和刪除已有...