首頁  >  文章  >  web前端  >  在專案中如何使用JS嚴格模式

在專案中如何使用JS嚴格模式

php中世界最好的语言
php中世界最好的语言原創
2018-06-05 09:17:042012瀏覽

這次帶給大家在專案中如何使用JS嚴格模式,在專案中使用JS嚴格模式的注意事項有哪些,以下就是實戰案例,一起來看一下。

什麼是嚴格模式?

使JS編碼更規範化的模式,消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為

怎麼使用?

直接加入下面的這句字串就可以了,這種語法可以向後相容,如果是不支援嚴格模式的javascript引擎,就會直接當成是一個未賦值的字串字面量,會直接忽略,支援的引擎就會開啟嚴格模式

#'use strict'

說明:

1.在全域作用域使用的話,那整個js腳本就會開啟這種模式

2.如果是只在函數內部使用的話,那麼就只是該函數內部開啟而已

function doSomething(){
 'use strict' 
 // 其他代码 
}

#變數

1. 在嚴格模式中什麼時候創建變數以及怎麼創建變數都是有限制的.首先,不允許意外創建全域變數.在非嚴格模式下是可以像下面這樣創建全域變數,但是嚴格模式中是不可以的

#// 未宣告變數
// 非嚴格模式:建立全域變數
// 嚴格模式:拋出referenceEror錯誤

2.在嚴格模式下,對變數名也是有限制.特別的,不能使用implements,interface,let,package,private等保留字作為變數名稱,用這些變數命名的話,都會導出語法錯誤

#物件

在嚴格模式下操作物件比在非嚴格模式下更容易導致錯誤,下面幾種情形會導致語法錯誤

#1.為唯讀屬性賦值會拋出TypeError

2.對不可配置的屬性使用delete 操作符會拋出TypeError

3.對不可擴充的物件新增屬性會拋出TypeError

函數

在嚴格模式下,要求命名函數的參數必須是唯一的

// 重命名参数的
// 非严格模式:没有错误,只能访问第二个参数,如果要访问第一个参数,就必须通过arguments
// 严格模式语法错误
function sum(num,num){
  //do something   
}

在嚴格模式下arguments物件的行為也有所不同.在嚴格模式下,修改命名參數的值也會反映到argument物件中,但是在嚴格模式下這兩個值是完全獨立的

function showValue(value){
 value = 'foo'
 console.log(value)
 console.log(arguments[0]) // 非严格模式 : 'foo' 严格模式 :'hello'
  
}   
showValu('hello')

 函數

 在嚴格模式中,函數的參數必須唯一

// 重名的参数
// 非严格模式中,没有错误,只能访问第一个参数
// 严格模式 :抛出错误 Uncaught SyntaxError: Duplicate parameter name not allowed in this context
function sum(num,num){
  'use strict'
  // do something 
}

arguments物件

#在非嚴格模式中,修改命名參數的值也會反應到arguments物件中,而嚴格模式坐下,這兩個值是完全獨立的

// 修改命名参数的值
// 非严格模式:修改会反应到arguments中
// 严格模式中不会反应到arguments中
function sum(num,num2){
  'use strict'
num=3
  console.log(arguments[0],num2)// 严格模式下输出为1,2 非严格模式下输出为3,2
}
sum(1,2)

 eval()

 eval函數最大的變化就是他在包含上下文中不在創建變數或函數:

// 使用eval函数创建变量
// 非严格模式中:弹出框弹窗 20
// 严格模式中:调用alert(x)时报错
function doSomething(){
  eval('var x=20')
  alert(x)
}

在嚴格模式中,可以在eval ()中宣告變數和函數,但這些邊行或函數只能在被求值的特殊作用域中有效,隨後就將被銷毀,下面這段程式碼執行就是沒問題的

'use strict'
var result=eval('x=1,y=13;x+y')
alert(result)

在這裡,eval中聲明了變數x和y,然後將他們加在一起,反悔了他們的和,於是result變數的值就是21,即x y的結果,在調用alert時,儘管x和y已經不存在了,result變數的值還是有效的

抑制this

#在非嚴格模式下使用函數的apply( )或則call()方法時,null和undefined值會被轉換為全域物件,而在嚴格模式下,函數的this值始終是指定的值,無論指定的是什麼值:

// 访问属性
// 非严格模式:访问全局实行
// 严格模式:抛出错误,因为this的值是null
var color = "red";
function displayColor() {
 alert(this.color);
}
displayColor(null);

其他變化

#

在严格模式中with语句被抛弃掉了,在非严格模式中with语句能够改变解析标识符的路径,但在严格模式下,with语句被简化掉了,因此,在严格模式下使用with语句是导致语法错误

// with语句
// 非严格模式:允许
// 严格模式:抛出语法错误
with (location) {
 console.log(href);
}

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读

js函数项目中常用方法总结

怎样使用原生js做出满天星效果

以上是在專案中如何使用JS嚴格模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn