JS ES5的嚴格模式

2021-10-09 03:18:13 字數 2477 閱讀 2475

從es3到es5版本的革新意味著要摒棄舊語法,產生新語法

現在的瀏覽器是基於es3的方法+es5的新增方法,而兩者產生衝突的語法部分(即es3能用 es5不能用,或es5能用 es3不能用,或兩者產生的效果不同)遵循es3的語法規則

我們也可以使用es5的嚴格模式,在這種模式下,es3和es5產生衝突的部分遵循es5的語法規則,不再相容es3的一些不規則語法,使用全新的es5規範

啟動語句:"use strict";

為什麼寫成字串形式,而不寫成方法呢?

寫成字串形式,起到了乙個向後相容的作用,保證老版本的不相容嚴格模式的瀏覽器不會報錯,也保證了新版本的能相容的瀏覽器能夠識別

兩種用法:

function

demo()

demo()

function

test()

test()

<

/script>

with會把傳遞過來的引數物件作為with要執行的**體的作用域鏈的最頂端(0號位)

var obj =

var name =

'window'

;function

test()

}test

()

with在命名空間的運用

var org =

, yzy:},

dp2:}}

with

(org.dp1.ls)

with

(org.dp2.ls)

with

(document)

缺點:修改作用域鏈,系統要耗費時間空間,**效率降低

function

demo()

demo()

function

test()

test

()

function

demo()

function

test()

function

test1()

demo

()

1. 變數賦值前必須宣告(es3中給未經宣告的變數賦值,預設為全域性變數)

var a = b =

2;

b變數未被宣告 就進行了賦值操作

2. 區域性的this必須被賦值,賦什麼就是什麼

es3中函式預編譯過程(區域性)this指向window

"use strict"

;function

test()

test

()

es5嚴格模式下預編譯過程(區域性)this不再指向window,為空,需要被賦值

"use strict"

;function

test()

newtest

()

es5嚴格模式下全域性的this還是指向window

"use strict"

;console.

log(

this

)

3. 拒絕重複屬性和引數

在es3中允許重複的引數和屬性,但在es5中不允許

//es3

var obj =

console.

log(obj.name)

//bb

function

test

(name,name)

test(1

,2)//2

//es5

"use strict"

;var obj =

console.

log(obj.name)

// bb 能輸出 不報錯 但是禁止這樣寫的

function

test

(name,name)

test(1

,2)

前端面試題 js es5

請補全j ascript函式,要求以字串的形式返回引數的型別。注意 只需檢測基本資料型別。function typeof value 請補全j ascript函式,要求以boolean的形式返回第乙個引數是否屬於第二個引數物件的例項。function instanceof left,right 請補...

JS ES5模擬super與多級繼承 三

參考文章 js多層繼承 super方法 參考文章1中提供了乙個思路,super不一定要是乙個變數,也可以是乙個函式,只要它能返回我們期望的父級物件就可以了.下面是我對它給出的原始碼的一些修改和注釋,另外有3個測試示例.author general github 要想擁有 super 方法,必須繼承s...

js ES5和ES6定義類的區別

以下是es5標準裡定義類的方法 function point x,y point.prototype.tostring function var point new point 1,2 上面這樣用建構函式和原型混合的方法定義類,是為了每次new新例項時可以共享方法,不用建立function新例項。所...