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

JS?ES5創(chuàng)建常量詳解

 更新時間:2022年07月01日 08:47:06   作者:德育處主任?  
這篇文章主要介紹了JS?ES5創(chuàng)建常量詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下

前言

ES6 剛推出的時候,letconst應該是大多數(shù)人學習ES6的第一個知識點。

其中const可以用來定義 常量 ,將不需要改變的數(shù)據(jù)定義成一個常量。

但其實在ES6之前我們也是有辦法定義常量的。

ES 5 創(chuàng)建常量

Object.defineProperty 的基礎用法

ES6之前是沒有const的,如果需要定義常量,可以使用Object.defineProperty。

很多人知道Vue2使用 Object.defineProperty監(jiān)聽數(shù)據(jù)變化,但不一定知道 Object.defineProperty也可以用來定義常量。

Object.defineProperty方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性,并返回此對象。Object.defineProperty(obj, prop, descriptor)接收3個參數(shù)

  • obj: 要定義屬性的對象。
  • prop: 要定義或修改的屬性的名稱或 Symbol 。
  • descriptor: 要定義或修改的屬性描述符。

舉個例子:

var LH = {}
Object.defineProperty(LH, 'name', {
  value: '雷猴'
})
console.log(LH) // 輸出: {name: '雷猴'}
LH.name = '鯊魚辣椒'
console.log(LH)  // 輸出: {name: '雷猴'}

可以將上面的代碼放到你的瀏覽器里試試。

為什么修改LH.name無效呢?因為descriptor除了value之外,還有其他屬性,比如writable就可以用來定義該對象是否允許被修改,默認是false,也就是不能修改。

所以 LH.name = '鯊魚辣椒'修改無效。

如果將writable改成true就可以修改了

var LH = {}
Object.defineProperty(LH, 'name', {
  value: '雷猴',
  writable: true // 允許修改
})
console.log(LH) // 輸出: {name: '雷猴'}
LH.name = '鯊魚辣椒'
console.log(LH)  // 輸出: {name: '鯊魚辣椒'}

創(chuàng)建常量

順著上面的思路,如果我們把LH改成window,那是不是就可以在window上定義一個屬性,而且該屬性是全局的,定義后在什么地方都能調(diào)用。

Object.defineProperty(window, 'NAME', {
  value: '雷猴'
})
console.log(NAME) // 輸出: 雷猴
NAME = '鯊魚辣椒'
console.log(NAME) // 輸出: 雷猴
window.NAME = '蟑螂惡霸'
console.log(NAME) // 輸出: 雷猴

不管如何修改,NAME 都是最開始定義的值。

常量居然可以修改值?

上面創(chuàng)建的常量,value是一個基礎數(shù)據(jù)類型的值。如果換成引用類型的值,那內(nèi)容是可以修改的。

Object.defineProperty(window, 'NAME', {
  value: {
    nickname: '雷猴'
  }
})
console.log(NAME)
NAME.nickname = '鯊魚辣椒'
console.log(NAME)

原因是,常量鎖定的是定義時所指向的內(nèi)存地址。

定義基礎數(shù)據(jù)類型時,內(nèi)存地址直接指向那個值。但定義引用類型時,內(nèi)存地址存的是引用地址。所以常量的定義指的是引用地址不能修改。

兼容性

使用 Object.defineProperty 定義常量時需要注意兼容性

到此這篇關于JS ES5創(chuàng)建常量詳解的文章就介紹到這了,更多相關JS ES5創(chuàng)建常量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JavaScript中reduce方法的用法及使用場景

    JavaScript中reduce方法的用法及使用場景

    reduce()方法對數(shù)組中的每個元素按序執(zhí)行一個提供的reducer函數(shù),每一次運行 reducer會將先前元素的計算結果作為參數(shù)傳入,最后將其結果匯總為單個返回值,今天我們就介紹一下reduce的幾種簡單使用場景,需要的朋友可以參考下
    2023-08-08
  • JavaScript錯誤處理之分析 Uncaught(in promise) error的原因及解決方案

    JavaScript錯誤處理之分析 Uncaught(in promise) error的

    在開發(fā)過程中,JavaScript的錯誤處理是一個老生常談的話題,當應用程序發(fā)生未捕獲的異常時,Uncaught(in promise) error是其中最常見的錯誤類型,這篇文章將從多個方面詳細闡述這種錯誤類型的原因與解決方案,感興趣的朋友一起看看吧
    2023-12-12
  • js正文內(nèi)容高亮效果的實現(xiàn)方法

    js正文內(nèi)容高亮效果的實現(xiàn)方法

    這篇文章介紹了js正文內(nèi)容高亮效果的實現(xiàn)方法,有需要的朋友可以參考一下
    2013-06-06
  • 一個對于Array的簡單擴展

    一個對于Array的簡單擴展

    一個對于Array的簡單擴展...
    2006-10-10
  • 解決Babylon.js中AudioContext was not allowed to start異常問題

    解決Babylon.js中AudioContext was not allowed&nbs

    這篇文章主要介紹了解決Babylon.js中AudioContext was not allowed to start異常問題方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • JavaScript數(shù)組各種常見用法實例分析

    JavaScript數(shù)組各種常見用法實例分析

    這篇文章主要介紹了JavaScript數(shù)組各種常見用法實例分析,包括數(shù)組的添加、刪除、替換、還原等常見技巧,非常具有實用價值,需要的朋友可以參考下
    2015-08-08
  • laypage+SpringMVC實現(xiàn)后端分頁

    laypage+SpringMVC實現(xiàn)后端分頁

    這篇文章主要為大家詳細介紹了laypage+SpringMVC實現(xiàn)后端分頁,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 深入了解javascript 數(shù)組的sort方法

    深入了解javascript 數(shù)組的sort方法

    在javascript中,數(shù)組對象有一個有趣的方法sort,它接收一個類型為函數(shù)的參數(shù)作為排序的依據(jù)。這意味著開發(fā)者只需要關注如何比較兩個值的大小,而不用管排序這件事內(nèi)部是如何實現(xiàn)的
    2018-06-06
  • [Web]防止用戶復制頁面內(nèi)容和另存頁面的方法

    [Web]防止用戶復制頁面內(nèi)容和另存頁面的方法

    原理就是利用js控制一些復制等事件,但破解也簡單,這里就不說了。
    2009-02-02
  • JS實現(xiàn)數(shù)組去重的11種方法總結

    JS實現(xiàn)數(shù)組去重的11種方法總結

    去重是開發(fā)中經(jīng)常會碰到的一個熱點問題,這篇文章主要介紹了JS中實現(xiàn)數(shù)組去重的11個方法總結,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-04-04

最新評論