2017-10-08 51 views
0

在嚴格模式下使用Object.freeze()時,當我嘗試修改凍結對象的屬性時,它不會引發異常。當凍結對象發生變化時,Object.freeze在嚴格模式下不會拋出異常

MDN says試圖變異凍結對象將拋出一個TypeError

In strict mode such attempts will throw TypeErrors

這裏有以下一些簡單的代碼:

'use strict'; 

//jshint esnext:true 
const func =() => { 
    const o = { id: 0 }; 
    Object.freeze(o); 
    o.id = 3; 
}; 

func(); 

演示:https://jsbin.com/fobokipive/edit?js,console

的代碼不會拋出任何TypeError。我使用基於Chromium的Opera。

這是預期的行爲還是我做錯了什麼?

回答

3

你正在做的正確;該問題似乎與JSBin。 運行通過的jsfiddle完全相同的代碼(as seen here)引發錯誤:

Uncaught TypeError: Cannot assign to read only property 'id' of object '#'

在StackSnippet運行它產生相同的誤差,以及:

'use strict'; 
 

 
//jshint esnext:true 
 
const func =() => { 
 
    const o = { id: 0 }; 
 
    Object.freeze(o); 
 
    o.id = 3; 
 
}; 
 

 
func();

而此錯誤僅在嚴格模式下引發:

//jshint esnext:true 
 
const func =() => { 
 
    const o = { id: 0 }; 
 
    Object.freeze(o); 
 
    o.id = 3; 
 
}; 
 

 
func();

希望這有助於! :)

+0

借調..我在jsfiddle中看到了同樣的東西。 – mituw16