js 嚴格模式

2021-08-18 03:59:53 字數 873 閱讀 1953

基於es3.0和es5.0新增的方法使用的,es3.0和es5.0產生矛盾的地方在嚴格模式下就是採用的es5.0,否則js解析採用es3.0

注意:"use strict"要放在邏輯的最頂端(**的最頂端,有作用範圍,在函式最頂端就是當前函式採取嚴格模式)

嚴格模式:

1.不允許用with(){}---with可以改變作用域鏈的結果,極費效率,將obj放在作用域鏈的頂端,相當於移動了所有原先的ao

所以嚴格模式下不允許用。

var obj=;

var name="scope";

with(obj)

2.變數必須加var ; arguments.callee和caller都不能用。

3.區域性的this必須賦值,被賦值的就是this的值,不賦值就是undefined

1.常規模式中預編譯會直接給this賦值window;而在嚴格模式下不會產生預設this是window的情況,沒賦值就是undefined;

2.常規模式下:test.call(123)會將123包裝成number物件賦給this,不允許出現this是原始值的情況;

嚴格模式下:test.call(123)中,this就是123,賦值是什麼就是什麼。

4.test(name,name){}---嚴格模式拒絕重複屬性(物件中有相同屬性名也不行,暫時不報錯。重複引數會報錯)

1.常規模式:test(1,2) name是取後乙個的值(函式體內的name就是2)

2.嚴格模式:test(1,2) ---error.不允許形參相同。

5.eval('***')---***的字串可以寫js邏輯**,然後可以解析執行

!!!eval在es3.0和es5.0都不能用,因為會改變作用域,很危險。

js 嚴格模式

簡單整理一下js嚴格模式下的變化。整理 mdn 部分 測試環境 chrome 76.0.3809.132 use strict mistypedvaraible 17 這一行 就會丟擲 referenceerror。不可以不寫宣告 主流瀏覽器現在實現了嚴格模式。但是不要盲目的依賴它,因為市場上仍然有...

js嚴格模式

es6 的模組自動採用嚴格模式,不管你有沒有在模組頭部加上 use strict 嚴格模式主要有以下限制。變數必須宣告後再使用 函式的引數不能有同名屬性,否則報錯 不能使用with語句 不能對唯讀屬性賦值,否則報錯 不能使用字首0表示八進位制數,否則報錯 不能刪除不可刪除的屬性,否則報錯 不能刪除變...

JS 嚴格模式

標誌 use strict 老版本瀏覽器會自動忽略 呼叫 整個檔案呼叫 function 單個函式呼叫 function 語法 行為 嚴格模式下 不宣告的變數賦值的話,會報錯誤 禁止使用with eval作用域只在內部,不再能夠生成全域性變數了 this關鍵字不再指向全域性 建構函式如果忘記new ...