從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新例項。所...