欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript嚴(yán)格模式詳解(含嚴(yán)格模式與非嚴(yán)格模式的區(qū)別)

 更新時間:2019年11月12日 09:12:56   作者:jm365  
這篇文章主要介紹了javascript嚴(yán)格模式詳解(含嚴(yán)格模式與非嚴(yán)格模式的區(qū)別),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

嚴(yán)格模式的優(yōu)缺點

優(yōu)點:

  1. 提高代碼解析與運行速度
  2. 禁用一些不合理的語法,減少代碼的怪異行為

缺點

  1. 某些代碼在嚴(yán)格模式下會報錯,尤其引入公用與第三方模塊的時候需要注意
  2. 有些嚴(yán)格模式的特性在不同瀏覽器的支持情況不同,需要注意兼容問題

嚴(yán)格模式與非嚴(yán)格模式的區(qū)別

1.禁用with語法,使用將報錯

因為解析with語法時作用域的情況會非常復(fù)雜,嚴(yán)重影響代碼的解析與運行速度

function usualMode() {
  with({a: 1}) {
    console.log(a)
  }
}
usalMode() // 正常輸出 1

function strictMode() {
  'use strict'
  with({a: 1}) {
    console.log(a)
  }
}
strictMode() // 將報錯

2.禁止刪除變量與函數(shù)

function usualMode() {
  function fn() {} 
  var a = 1
  delete a // 不會報錯,但實際上也沒能刪除變量a
  delete fn // 同delete a
}
usalMode() // 正常執(zhí)行

function strictMode() {
  'use strict'
  function fn() {} 
  var a = 1
  delete a
}
strictMode() // 將報錯

3.屬性描述符(propertyDescriptor)相關(guān)

能改變屬性描述符的方法有Object.defineProperty、Object.defineProperties、Reflect.defineProperty、Reflect.defineProperties、Object.freeze、Object.seal;獲取一個屬性描述符可以用Object.getOwnPropertyDescriptor、Object.getOwnPropertyDecriptors,ES6中還有Reflect.getOwnPropertyDescriptor、Reflect.getOwnPropertyDescriptors

3.1刪除configurable = false的屬性會報錯

'use strict'
var obj = {}
Object.defineProperty(obj, 'a', {
  configurable: false,
  value: 1
})
delete obj.a // 嚴(yán)格模式會報錯;非嚴(yán)格模式會返回false

3.2給writable = false的屬性賦值會報錯

'use strict'
var obj = {}
Object.defineProperty(obj, 'a', {
  writable: false,
  value: 1
})
obj.a = 2 // 嚴(yán)格模式會報錯;非嚴(yán)格模式不會報錯,但也不會生效,obj.a 仍然等于 1

4.給不允許擴展的object增加屬性會報錯

'use strict'
var obj = {a: 1}
Object.preventExtensions(obj)
obj.b = 2 // 嚴(yán)格模式下會報錯;非嚴(yán)格模式不會報錯,但也不會生效 'b' in obj 為false

能將object設(shè)置為不可擴展的方法有Object.freeze、Object.seal、Object.preventExtensions;ES6還有Reflect.freeze、Reflect.seal、Reflect.preventExtensions;判斷一個object是否允許擴展可以用Object.isExtensible;ES6還有Reflect.isExtensible

5.給未申明的變量賦值會報錯

'use strict'
a = 1 // 嚴(yán)格模式下將報錯,非嚴(yán)格模式a變量會提升至全局作用域

6.定義object時屬性重名會報錯

'use strict'
var obj = {a: 1, a: 2}// 嚴(yán)格模式將報錯;非嚴(yán)格模式后面一個a會覆蓋前面的a,即obj.a = 2

7.形參重復(fù)時會報錯

'use strict'
function fn(a, a) {
  console.log(a, arguments)
}
fn(1,2) // 嚴(yán)格模式會報錯;非嚴(yán)格模式不會報錯,a=2,arguments中兩個參數(shù)都有

8.eval相關(guān)

8.1eval有獨立作用域

'use strict'
eval('var a = 1')
console.log(typeof a) // 嚴(yán)格模式下為undefined;非嚴(yán)格模式下為number

8.2eval不能作為變量名或函數(shù)名,類似關(guān)鍵字

'use strict'
var eval = 1 // 嚴(yán)格模式下將報錯;非嚴(yán)格模式將申明一個值為1的變量eval

// 嚴(yán)格模式下將報錯;非嚴(yán)格模式將申明一個對應(yīng)的eval函數(shù)
function eval() {
// some code
}

9.arguments相關(guān)

9.1arguments是形參的副本(類似淺拷貝)

'use strict'
function fn(a, obj){
  arguments[0] = 2
  arguments[1].b = 2
  console.log(a) // 嚴(yán)格模式為1;非嚴(yán)格模式為2
  console.log(obj.b) // 2,因為js中object是地址傳遞
}
fn(1, {b: 1})

9.2arguments不能作為變量名或函數(shù)名,類似關(guān)鍵字

'use strict'
var arguments = 1 // 嚴(yán)格模式下將報錯;非嚴(yán)格模式將申明一個值為1的變量arguments

// 嚴(yán)格模式下將報錯;非嚴(yán)格模式將申明一個對應(yīng)的arguments函數(shù)
function arguments() {
  // some code
}

10.禁用caller與callee

'use strict'
function fn() {
  console.log(arguments.callee.caller, fn.caller) // 嚴(yán)格模式下報錯;非嚴(yán)格模式指向fn2
  console.log(arguments.callee) // 嚴(yán)格模式報錯;非嚴(yán)格模式指向fn
}
function fn2() {
  fn()
}
fn2()

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何編寫一個 Webpack Loader的實現(xiàn)

    如何編寫一個 Webpack Loader的實現(xiàn)

    這篇文章主要介紹了如何編寫一個 Webpack Loader的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • JavaScript函數(shù)執(zhí)行、作用域鏈以及內(nèi)存管理詳解

    JavaScript函數(shù)執(zhí)行、作用域鏈以及內(nèi)存管理詳解

    這篇文章主要介紹了JavaScript函數(shù)執(zhí)行、作用域鏈以及內(nèi)存管理的知識,文章內(nèi)容非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • JavaScript實現(xiàn)飛舞的泡泡效果

    JavaScript實現(xiàn)飛舞的泡泡效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)飛舞的泡泡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 利用JavaScript實現(xiàn)ISO周日歷

    利用JavaScript實現(xiàn)ISO周日歷

    周日歷是日常生活中不常用到的歷法系統(tǒng),一般用于政府、商務(wù)的會計年度或者學(xué)校教學(xué)日歷中。本文將利用JavaScript制作個簡單的周日歷,感興趣的可嘗試一下
    2022-07-07
  • Javascript中classList的基本使用方法

    Javascript中classList的基本使用方法

    classList 是一個非常實用的工具,可以讓我們輕松地操作元素的類名,在使用 classList 時,我們可以通過 add、remove、toggle 和 contains 等方法來添加、刪除、切換和檢查類名,接下來我們詳細(xì)學(xué)習(xí)一下classList的使用方法以及相關(guān)方法,感興趣的朋友一起看看吧
    2023-10-10
  • 淺談JavaScript對象與繼承

    淺談JavaScript對象與繼承

    下面小編就為大家?guī)硪黄獪\談JavaScript對象與繼承。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 詳解JavaScript實現(xiàn)哈希表

    詳解JavaScript實現(xiàn)哈希表

    哈希表是一種非常重要的數(shù)據(jù)結(jié)構(gòu),幾乎所有的編程語言都有直接或者間接的應(yīng)用這種數(shù)據(jù)結(jié)構(gòu)。本文將為大家介紹通過JavaScript如何實現(xiàn)哈希表,以及哈希表的一些常用操作,需要的可以參考一下
    2021-12-12
  • javascript實現(xiàn)鎖定網(wǎng)頁、密碼解鎖效果(類似系統(tǒng)屏幕保護效果)

    javascript實現(xiàn)鎖定網(wǎng)頁、密碼解鎖效果(類似系統(tǒng)屏幕保護效果)

    這篇文章主要介紹了javascript實現(xiàn)鎖定網(wǎng)頁、密碼解鎖效果,跟Windows系統(tǒng)的屏幕保護效果類似,需要的朋友可以參考下
    2014-08-08
  • 微信小程序利用swiper+css實現(xiàn)購物車商品刪除功能

    微信小程序利用swiper+css實現(xiàn)購物車商品刪除功能

    這篇文章主要介紹了微信小程序利用swiper+css實現(xiàn)購物車商品刪除功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • bootstrap日歷插件datetimepicker使用方法

    bootstrap日歷插件datetimepicker使用方法

    這篇文章主要為大家詳細(xì)介紹了bootstrap日歷datetimepicker插件的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論