1:嚴(yán)格模式開啟
''use strict''
既可用于函數(shù)外部,也可以用于函數(shù)里面.要讓整個(gè)腳本文件開啟嚴(yán)格模式,必須放文件頂部.也就是文件的第一句是它.這是一個(gè)編譯指示.指示解釋器開啟嚴(yán)格模式.
2:變量
a,不允許意外創(chuàng)建全局變量.
b,不能對變量調(diào)用delete操作符.
c,不能使用保留字作為變量名.
3:對象
a,為只讀屬性賦值會(huì)拋出TypeError.
b,對不可配置的屬性使用delete操作符會(huì)拋出TypeError
c,為不可擴(kuò)展的對象添加屬性會(huì)拋出TypeError.
(以上三種情況在非嚴(yán)格模式下會(huì)靜默失敗而不是拋出異常)
d,在使用對象字面量時(shí),屬性名必須唯一.
4:函數(shù)
a,函數(shù)參數(shù)必須唯一,不能定義類似 這樣function sum(num,num){}
.在非嚴(yán)格模式下直接第二個(gè)num,如果要使用第一個(gè)num要使用arguments[0]
b,非嚴(yán)格模式下,修改命名參數(shù)值也會(huì)反映到arguments對象中,而嚴(yán)格模式下這兩個(gè)值是完全獨(dú)立的.
function showValue(vaule){
value='foo';
console.log(value);//foo;
console.log(arguments[0]);//非嚴(yán)格模式:'foo',嚴(yán)格模式:'hi'
}
showValue('hi');
c,淘汰了arguments.callee和arguments.caller.在非嚴(yán)格模式下,這兩個(gè)屬性一個(gè)引用函數(shù)本身,一個(gè)引用調(diào)用函數(shù).而在嚴(yán)格模式下,訪問會(huì)報(bào)錯(cuò)TypeError.
d,函數(shù)名不用使用關(guān)鍵字與保留字.
e,只能在腳本的頂級(jí)和函數(shù)內(nèi)部聲明函數(shù).也就是說在if語句聲明函數(shù)會(huì)導(dǎo)致語法錯(cuò)誤.
5:eval()
eval它在包含上下文中不再創(chuàng)建變量或者函數(shù).
function doSomething(){
eval('var x=10');
console.log(x);//在非嚴(yán)格模式下:10;在嚴(yán)格模式下 會(huì)拋出ReferenceError
}
6:eval和arguments
嚴(yán)格模式下禁止使用eval和arguments作為標(biāo)識(shí)符,也不允許讀寫它們的值.
7:抑制this
在非嚴(yán)格模式下使用函數(shù)的apply()或call()方法時(shí),null或undefined值會(huì)被轉(zhuǎn)換為全局對象.而在嚴(yán)格模式下,函數(shù)的this值始終是指定的值,無論指定的是什么值.
//訪問屬性
//非嚴(yán)格模式:訪問全局屬性.
//嚴(yán)格模式:拋出錯(cuò)誤,因?yàn)閠his的值為null
var color='red';
function displayColor(){
console.log(this.color);
}
displayColor.call(null);
8:other
a,拋棄了with語句.
b,去掉了JavaScipt中的八進(jìn)制字面量.
var value=parseInt('010');
console.log(value);//非嚴(yán)格模式:8;嚴(yán)格模式:10
以上筆試來自js紅寶書<<JavaScript高級(jí)程序設(shè)計(jì)第三版>>