JavaScript嚴格模式(三)- 物件的禁止操作

敘利亞暑期工發表於2020-10-31

JavaScript嚴格模式(三)

在嚴格模式下哪些關於物件的操作是禁止的

不可刪除的屬性

在嚴格模式下,不能使用delete運算子刪除不可刪除的屬性

//開啟嚴格模式
"use strict"
delete Object.prototype;//刪除Object裡邊的原型
console.log(Object.prototype);//直接報錯

屬性名必須唯一

在嚴格模式下,一個物件內的所有屬性名在物件內必須唯一。

//開啟嚴格模式
"use strict"
//建立一個物件
var obj = {
	name:'第一個屬性';
	name:'第二個屬性';
}
console.log(obj.name);//第二個屬性

在開啟嚴格模式下,物件具有相同名稱的屬性時,執行時並不會報錯,但是編輯器會顯示報錯,這種寫法也沒有意義

只讀屬性的賦值

在嚴格模式下,不能為一個只讀的屬性進行重新賦值

//開啟嚴格模式
"use strict"
//建立一個物件
var obj = {	
	name:'milk'
}
//判斷當前指定的屬性是否為只讀屬性
var  result = Object.getOwnPropertyDescriptor(obj,'name');
console.log(result);
//結果{value: 'milk', writable: true, enumerable: true, configurable: true} - 可以修改
//但是我們使用getOwnPropertyDescriptor()方法建立的物件屬性是隻讀屬性
Object.defineProperty(obj,'age',{
	value:18
});
//然後針對只讀屬性age進行修改操作
obj.age = 80;
console.log(obj.age);//報錯

在非嚴格模式下 - 改變針對age只讀屬性的修改操作不會報錯,但是值還是18,我們管這種問題叫做靜默失敗

不可擴充套件的物件

在嚴格模式下,不能為不可擴充套件的物件新增新屬性

//開啟嚴格模式
"use strict"
//建立一個物件
var obj = {};
//設定物件obj是一個不可擴充套件的物件
Object.preventExtensions(obj);
//為物件obj新增屬性或方法
obj.name = 'milk';
console.log(obj);//直接報錯

在非嚴格模式下,還是靜默失敗

相關文章