JS防篡改物件

2021-09-26 15:56:50 字數 3802 閱讀 8332

在預設情況下,所有物件都是可以擴充套件的,也就是說,無論什麼時候都可以向物件中新增屬性和方法。

例如以下,先定義乙個物件,再向其新增乙個新屬性:

var obj =

obj.age =20;

console.

log(obj.age)

;//20

即使先定義好乙個物件,後面也可以向其新新增屬性和方法。

1.1 object.preventextensions()方法

現在使用object.preventextensions()方法可以改變這個行為,這樣就不能向物件中新新增屬性和方法了,但是仍然可以修改(覆蓋)物件中原有的屬性和方法。

var obj =

object.

preventextensions

(obj)

;//阻止篡改物件

obj.age =20;

console.

log(obj.age)

;//undefined

//修改原有的屬性

obj.name =

"bob"

;console.

log(obj.name)

;//bob

可以發現,使用了object.preventextensions()方法,就不能向物件中新新增屬性和方法了,但是可以修改物件原有的屬性和方法。

1.2 object.i***tensible()方法
使用這個方法可以確定物件是否為可篡改,如果可篡改,則返回true,相反返回false。

var obj =

console.

log(object.

i***tensible

(obj));

//true

object.

preventextensions

(obj)

;//阻止篡改物件

console.

log(object.

i***tensible

(obj));

//false

密封物件不可擴充套件,且其物件的屬性特性configurable被設定為false,意味著物件的屬性和方法不能通過delete操作符刪除,但是仍然可以修改(覆蓋)物件中原有的屬性和方法。

2.1 object.seal()方法:該方法用於密封物件。
var obj =

//密封物件

object.

seal

(obj)

;obj.age =20;

console.

log(obj.age)

;//undefined 不能新新增屬性

obj.name =

'jack'

delete obj.name;

console.

log(obj.name)

;//jack 不能刪除物件的屬性,但是物件的屬性仍然可以被修改

密封的物件不能新新增屬性、不能刪除屬性。擁有了不可擴充套件物件的特性。

2.2 object.issealed()方法
該方法用於確定物件是否是密封物件,如果是密封物件返回true,相反返回false。

var obj =

console.

log(object.

i***tensible

(obj));

//true

console.

log(ojbect.

issealed

(obj));

//false

object.

seal

(obj)

;console.

log(object.

i***tensible

(obj));

//false

console.

log(ojbect.

issealed

(obj));

//true

保護物件的最高端防篡改就是凍結物件。凍結的物件,即是不可擴充套件的,也是密封的,而且其屬性的特性writable被設定為false,也就是說屬性值也不能修改。

3.1 object.freeze()方法:該方法用於設定物件為凍結物件。
var obj =

object.

freeze

(obj)

;//凍結物件

obj.age =20;

console.

log(obj.age)

;//undefined 不可擴充套件

delete obj.name;

console.

log(obj.name)

;//tom 不可刪除

obj.name =

"jack"

;console.

log(obj.name)

;//tom 不可修改

凍結物件同時擁有了不可擴充套件物件、密封物件的特性。

3.2 object.isfrozen()方法
該方法用於確定物件是否是凍結物件。如果是返回true,相反返回false。

var obj =

//未凍結之前

console.

log(oject.

i***tensible

(obj));

//true

console.

log(oject.

issealed

(obj));

//false

console.

log(oject.

isfrozen

(obj));

//false

//凍結物件之後

object.

freeze

(obj)

;//凍結物件

console.

log(oject.

i***tensible

(obj));

//false

console.

log(oject.

issealed

(obj));

//true

console.

log(oject.

isfrozen

(obj));

//true

總結:
window.scatter=

object.

defineproperty

(window,

"scatter",)

;window.scatter=

'jack'

console.

log(window.scatter)

// 不可修改

我的個人部落格,有空來坐坐

js 防篡改物件

簡單介紹一下js的防篡改物件 1 不可擴充套件物件 不能新增,可以修改和刪除 預設情況下,所有物件都是可擴充套件的。即任何時候我們都可以為物件新增屬性和方法。但使用object.preventextensions 方法可以改變這一預設行為,即不能再為物件新增新的屬性和方法,但是仍然可以修改和刪除已有...

防篡改物件

答 不可擴充套件物件 object.preventextensions 這樣就不能向物件中新新增屬性和方法了 不可擴充套件量一級保護措施。判斷 object.i tensible 方法 使用這個方法可以確定物件是否為可篡改,如果可篡改,則返回true,相反返回false。密封的物件 object.s...

JavaScript防篡改物件

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