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

JavaScrip關(guān)于創(chuàng)建常量的知識點(diǎn)

 更新時間:2017年12月07日 14:33:45   作者:諾河  
這篇文章主要介紹了JavaScrip創(chuàng)建常量的相關(guān)知識點(diǎn),幫助大家對JS更加深入的學(xué)習(xí),參考下吧。

本文通過JS中創(chuàng)建常量的定義用法以及函數(shù)寫法中常見的錯誤進(jìn)行深入分析,希望對大家有所用處:

所謂常量即只能讀取不能編輯(刪除,修改)的變量。

js并沒有原始的常量說法(即自定義的,原生態(tài)的),但是可以用一些偏僻的路子去創(chuàng)建。

1:const es6中的聲明關(guān)鍵詞。

上面聲明了兩個變量,當(dāng)執(zhí)行修改操作時就將報錯。從某種程度上來說,const是可以創(chuàng)建變量(基本類型)的。但是對引用類型就捉襟見肘。

當(dāng)聲明的變量是一個引用類型時即對象,對對象的操作(刪除,修改,添加)都是可以進(jìn)行的。

2:Object 方法(defineProperty,seal,freeze)實(shí)現(xiàn)

1) Object.defineProperty:   該方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性, 并返回這個對象。   

采用上述方法之后后續(xù)對a的修改功能就失效了,雖然修改功能不能正常執(zhí)行, 但是刪除功能卻還是可以照常進(jìn)行。

刪除之后繼續(xù)添加a屬性時,a又變成可改的了。上述只是將a屬性的可寫屬性改了,還有一個configurable屬性可以進(jìn)行設(shè)置。writable屬性只是將對應(yīng)的屬性變更為不可直接更改,但是可以走小路(先刪除在添加)。

到此屬性a就算定下來了,及不能修改,也不能刪除。

但是,新的風(fēng)暴有出現(xiàn)了。。。a雖然定下來了,但對于TEST_D這個變量來說,還沒有結(jié)束。。。

雖然屬性a不能變動了,但是并不影響對其他屬性的操作,比如b,s,u啊的,當(dāng)然針對這些屬性也可以像上述方式一樣將其余屬性的描述符,但是還是不能解決對TEST_D的擴(kuò)展。

2) Object.preventExtensions:  該方法讓一個對象變的不可擴(kuò)展,也就是永遠(yuǎn)不能再添加新的屬性。 查看詳情

通過該方法就可以將對象設(shè)置為不可擴(kuò)展了,即不可添加新屬性了,這樣這個變量就不能被修改了。

3)Object.seal:讓一個對象密封并返回被密封之后的對象,新對象將變得不可擴(kuò)展,即不能添加新的屬性但是可以修改原本可寫狀態(tài)的屬性

利用上述兩種方法循環(huán)使用是可以去創(chuàng)建常量的,但是比較復(fù)雜,而且當(dāng)對象比較大的時候,代碼量會比較大。Object.seal()可以簡化這個過程。這個方法可以將對象變得不可擴(kuò)展,屬性不可刪除。在此基礎(chǔ)上在將對象的所有屬性的描述符writable改為false就能得到我們要的變量了,即所謂常量。

4) Object.freeze:  該方法可以凍結(jié)一個對象,凍結(jié)指的是不能向這個對象添加新的屬性,不能修改其已有屬性的值,不能刪除已有屬性,以及不能修改該對象已有屬性的可枚舉性、可配置性、可寫性。也就是說,這個對象永遠(yuǎn)是不可變的。該方法返回被凍結(jié)的對象。

Object.freeze方法是在seal基礎(chǔ)上在將所有屬性的描述符writable改為false。

但是當(dāng)變量的屬性值又為對象時,及下列情況:

對于user屬性而言,他的值是還是可以更改的,這個時候就得對他也進(jìn)行凍結(jié)。

  

/**
 * 
 * 
 * @param {any} obj 
 */
function freezeObj(obj) {
 Object.freeze(obj);
 Object.keys(obj).forEach(key => {
 if (typeof obj[key] === 'object') {
  freezeObj(obj[key])
 }
 })
}

即:當(dāng)存在多重對象時,需要循環(huán)調(diào)用凍結(jié)方法。

 3: 閉包

const USER = (() => {
 const USER = {
 name: 'evening',
 gender: 'M'
 }
 return {
 get(name){
  return user[name]
 }
 }
})()
USER.get('name')

閉包用了比較隱秘的方法,將真正的對象原型保存在內(nèi)存中而且不會被回收,變相的將USER這個變量‘保護(hù)'起來,并且提供訪問的接口,但是不提供修改的接口。

相關(guān)文章

  • javascript基礎(chǔ)的動畫教程,直觀易懂

    javascript基礎(chǔ)的動畫教程,直觀易懂

    javascript基礎(chǔ)的動畫教程,直觀易懂...
    2007-01-01
  • 解析URI與URL之間的區(qū)別與聯(lián)系

    解析URI與URL之間的區(qū)別與聯(lián)系

    URI就是一種資源定位機(jī)制,它是比較籠統(tǒng)地定位了資源,并不局限于客戶端和服務(wù)器,而URL就定位了網(wǎng)上的一切資源,只要是網(wǎng)上的資源,都有唯一的URL
    2013-11-11
  • onkeyup,onkeydown和onkeypress的區(qū)別介紹

    onkeyup,onkeydown和onkeypress的區(qū)別介紹

    三者在事件的響應(yīng)上還有一點(diǎn)不同,就是onkeydown 、onkeypress事件響應(yīng)的時候輸入的字符并沒有被系統(tǒng)接受,而響應(yīng)onkeyup的時候,輸入流已經(jīng)被系統(tǒng)接受
    2013-10-10
  • JavaScript數(shù)據(jù)類型詳解

    JavaScript數(shù)據(jù)類型詳解

    這篇文章主要介紹了JavaScript數(shù)據(jù)類型詳解,本文詳細(xì)講解了JavaScript中有5種基本數(shù)據(jù)類型:Undefined、Null、Boolean、Number和String,需要的朋友可以參考下
    2015-04-04
  • JavaScript中的操作符類型轉(zhuǎn)換示例總結(jié)

    JavaScript中的操作符類型轉(zhuǎn)換示例總結(jié)

    最近發(fā)現(xiàn)在前端的面試題目中經(jīng)常出現(xiàn)操作符類型轉(zhuǎn)換的題目,于是這里來進(jìn)行一個JavaScript中的操作符類型轉(zhuǎn)換示例總結(jié),需要的朋友可以參考下
    2016-05-05
  • TypeScript中的接口和泛型你了解嗎

    TypeScript中的接口和泛型你了解嗎

    這篇文章主要為大家詳細(xì)介紹了TypeScript接口和泛型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • JavaScript基礎(chǔ)之對象

    JavaScript基礎(chǔ)之對象

    這篇文章主要介紹了如何理解JavaScript中的對象,幫助大家更好的學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2021-11-11
  • JavaScript初級教程(第一課)

    JavaScript初級教程(第一課)

    JavaScript初級教程(第一課)...
    2007-04-04
  • JavaScript中splice的使用方法詳解

    JavaScript中splice的使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript中splice的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • JavaScript類屬性的訪問方式詳解

    JavaScript類屬性的訪問方式詳解

    這篇文章主要介紹了JavaScript類屬性的訪問方式,需要的朋友可以參考下
    2014-02-02

最新評論