文章出處

寫在前面

大家都知道使用"use strict"表示使用ECMAScript進行嚴格模式,使用"use strict"有兩種方式

  • 在文件頭部寫上它(使得整個腳本都使用嚴格模式)
  • 在函數頂部寫上它(只在函數內打開嚴格模式)

對于嚴格模式和非嚴格模式下,到底有哪些不同,下面我將一一道來。

變量

嚴格模式下 非嚴格模式下
不允許意外創建全局變量 允許省去var來創建全局變量
不能對變量調用delete操作符(也就是說使用delete來刪除變量時操作會直接報錯) 允許使用delete但操作失敗(也就是說使用delete來刪除變量時操作時不會直接報錯)

 

 

 

對象

嚴格模式下 非嚴格模式下
不允許為只讀屬性賦值 允許為只讀屬性賦值
不允許對不可配置(nonconfiguratable)屬性使用delete操作符 允許對不可配置(nonconfiguratable)屬性使用delete操作符
不允許為不可擴展(nonextensible)的對象添加屬性 允許為不可擴展(nonextensible)的對象添加屬性
使用對象字面量時,屬性名必須唯一 使用對象字面量時,屬性名可以重復

 

 

 

函數

嚴格模式下 非嚴格模式下
函數參數不能重復 函數參數可以重復,如果重復的話,參數最終的取值為第二個,如果要取得第一個的話則得使用arguments
函數參數和arguments是完全獨立的 修改命名參數的值同時會反映到arguments對象當中
淘汰arguments.callee和arguments.caller arguments.callee代表引用函數本身、arguments.caller調用當前引用函數的函數

不允許使用inplements、interface、let、package、private、protected、public、static、yield作為函數名

(因為這些是js當中的保留字并且已經在新的語法當中使用起來了)

允許使用inplements、interface、let、package、private、protected、public、static、yield作為函數名

 

eval

在嚴格模式下在eval中不再創建變量或函數

可以在eval中聲明變量和函數,但這些變量或函數只能被求值的特殊作用域中有效,隨后就被銷毀了。

eval和arguments

嚴格模式下禁止使用eval和arguments作為標識符,也不允許讀寫它們的值

非嚴格模式下可以重寫eval,也可以給arguments賦值

抑制this

在非嚴格模式下使用apply和call方法時,null或undefined值被轉換為全局對象

嚴格模式下,傳進去的是什么,this就是什么

with

嚴格模式下已經廢棄了with,但是非嚴格模式下可以使用with

parseInt的八進制

嚴格模式下去掉了javaScript的八進制字符量

 

 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()