首頁 web前端 js教程 關於JavaScrip創建常數的基礎知識(圖文教學)

關於JavaScrip創建常數的基礎知識(圖文教學)

May 19, 2018 am 09:09 AM
javascrip 基礎知識 常量

這篇文章主要介紹了JavaScrip創建常數的相關知識點,幫助大家對JS更加深入的學習,參考下吧。

本文透過JS中建立常數的定義用法以及函數寫法中常見的錯誤進行深入分析,希望對大家有所用處:

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

js並沒有原始的常數說法(即自訂的,原始生態的),但是可以用一些偏僻的路子去創建。

1:const es6中的宣告關鍵字。

上面宣告了兩個變量,當執行修改操作時就會報錯。從某種程度上來說,const是可以創建變數(基本類型)的。但對引用類型就捉襟見肘。

當宣告的變數是一個引用型別時即對象,對物件的操作(刪除,修改,新增)都是可以進行的。

2:Object 方法(defineProperty,seal,freeze)實作

1) Object.defineProperty:   該方法會直接在一個物件上定義一個新屬性,或修改一個物件的現有屬性, 並傳回這個物件。   

採用上述方法之後後續對a的修改功能就失效了,雖然修改功能不能正常執行, 但是刪除功能卻還是可以照常進行。

在刪除之後繼續加入a屬性時,a又變成可改變的了。上述只是將a屬性的可寫屬性改了,還有一個configurable屬性可以設定。 writable屬性只是將對應的屬性變更為不可直接更改,但是可以走小路(先刪除在新增)。

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

但是,新的風暴有出現了。 。 。 a雖然定下來了,但對於TEST_D這個變數來說,還沒結束。 。 。

雖然屬性a不能變動了,但是不影響對其他屬性的操作,例如b,s,u啊的,當然針對這些屬性也可以像上述方式一樣將其餘屬性的描述符,但還是無法解決對TEST_D的擴充。

2) Object.preventExtensions:  此方法讓一個物件變的不可擴展,也就是永遠無法再新增新的屬性。 查看詳情

透過該方法就可以將物件設為不可擴充了,也就是不可新增屬性了,這樣這個變數就不能被修改了。

3)Object.seal:讓一個物件密封並返回被密封之後的對象,新對象將變得不可擴展,即不能添加新的屬性但是可以修改原本可寫狀態的屬性

利用上述兩種方法循環使用是可以去創建常數的,但是比較複雜,而且當物件比較大的時候,程式碼量會比較大。 Object.seal()可以簡化這個過程。這個方法可以將物件變得不可擴展,屬性不可刪除。在此基礎上在將物件的所有屬性的描述符writable改為false就能得到我們要的變數了,也就是所謂常數。

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

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

但是當變數的屬性值又為物件時,及下列情況:

##對於user屬性而言,他的值是還是可以更改的,這個時候就得對他也進行凍結。

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

即:當存在多重物件時,需要循環呼叫凍結方法。

 3:閉包

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

閉包用了比較隱密的方法,將真正的物件原型保存在記憶體中而且不會被回收,變相的將USER這個變數'保護'起來,並且提供訪問的接口,但是不提供修改的接口。

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

Vue.js計算與偵聽器屬性使用詳解

js三種呼叫方式優缺點總結

動態引入js#四種方法總結

#

以上是關於JavaScrip創建常數的基礎知識(圖文教學)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1421
52
Laravel 教程
1315
25
PHP教程
1266
29
C# 教程
1239
24
C語言中的常數是什麼,可以舉例嗎? C語言中的常數是什麼,可以舉例嗎? Aug 28, 2023 pm 10:45 PM

常量也稱為變量,一旦定義,其值在程式執行期間​​就不會改變。因此,我們可以將變數宣告為引用固定值的常數。它也被稱為文字。必須使用Const關鍵字來定義常數。語法C程式語言中使用的常數語法如下-consttypeVariableName;(or)consttype*VariableName;不同類型的常數在C程式語言中使用的不同類型的常數如下所示:整數常數-例如:1,0,34, 4567浮點數常數-例如:0.0,156.89,23.456八進制和十六進制常數-例如:十六進制:0x2a,0xaa..八進制

如何在Python中創建一個常數? 如何在Python中創建一個常數? Aug 29, 2023 pm 05:17 PM

常量和變數用於在程式設計中儲存資料值。變數通常指的是可以隨時間變化的值。而常數是一種變數類型,其值在程式執行期間​​不能被改變。在Python中只有六個內建常數可用,它們是False、True、None、NotImplemented、Ellipsis(...)和__debug__。除了這些常數之外,Python沒有任何內建資料類型來儲存常數值。範例下面示範了常數的範例-False=100輸出SyntaxError:cannotassigntoFalseFalse是Python中的內建常數,用於儲存布林值

在Java中,僅使用final關鍵字可以定義一個常數嗎? 在Java中,僅使用final關鍵字可以定義一個常數嗎? Sep 20, 2023 pm 04:17 PM

常量變數是其值固定且程式中只存在一個副本的變數。一旦你聲明了一個常數變數並給它賦值,你就不能在整個程式中再次改變它的值。與其他語言不同,Java不直接支援常數。但是,你仍然可以透過宣告一個變數為靜態和final來創建一個常數。靜態-一旦你聲明了一個靜態變量,它們將在編譯時加載到內存中,即只有一個副本可用。 Final-一旦你宣告了一個final變量,就不能再修改它的值。因此,你可以透過將實例變數宣告為靜態和final來在Java中創建一個常數。範例 示範classData{&am

PHP報錯:呼叫未定義的常數怎麼解決? PHP報錯:呼叫未定義的常數怎麼解決? Aug 26, 2023 pm 03:39 PM

PHP是一種廣泛應用於網頁開發的伺服器端腳本語言,它的靈活性和易用性使其成為許多開發人員的首選。然而,在使用PHP時,我們有時會遇到一些報錯的情況。本篇文章將重點討論"呼叫未定義的常數"錯誤,以及如何解決這個問題。一、問題描述當我們在程式碼中使用一個未定義的常數時,PHP會拋出一個致命錯誤,提示我們呼叫了一個未定義的常數。以下是一個常見的例子:echoMY_

學習MySQL必看!詳細講解SQL語句基礎知識 學習MySQL必看!詳細講解SQL語句基礎知識 Jun 15, 2023 pm 09:00 PM

MySQL是一個開源的關聯式資料庫管理系統,被廣泛地應用於Web應用程式的開發和資料儲存。學習MySQL的SQL語言對於資料管理員和開發者來說是非常必要的。 SQL語言是MySQL中的核心部分,因此在學習MySQL之前,你需要對SQL語言有充分的了解,本文旨在為你詳細講解SQL語句基礎知識,讓你一步一步了解SQL語句。 SQL是結構化查詢語言的簡稱,用於在關係型數

一文帶你搞懂Python中變數與常數 一文帶你搞懂Python中變數與常數 Jul 25, 2023 pm 02:15 PM

本文基於Python基礎,主要介紹了Python基礎中變數和常數的區別,對於變數的用法做了詳細的講解,用豐富的案例 ,程式碼效果圖的展示幫助大家更好理解 。

基本資料型別常數的定義和初始化方法學習指南 基本資料型別常數的定義和初始化方法學習指南 Jan 05, 2024 pm 02:08 PM

學習基本資料型別常數的定義和初始化方法,需要具體程式碼範例在程式設計中,常常會用到各種基本資料型別,例如整數、浮點型、字元型等。在使用這些資料類型時,不僅需要了解它們的定義和用法,還需要知道如何定義和初始化它們的常數。本文將為大家介紹基本資料型態常數的定義和初始化方法,並給出具體的程式碼範例。整數常數的定義和初始化方法整數常數包括int、long、short和byt

學習canvas,需要了解哪些基本概念? 學習canvas,需要了解哪些基本概念? Jan 17, 2024 am 10:37 AM

學習canvas需要掌握哪些基礎?隨著現代Web技術的發展,使用HTML5中的<canvas>標籤進行繪圖成為一種常見的方式。 Canvas是用於繪製圖形、動畫和其他影像的HTML元素,它可以利用JavaScript進行操作和控制。如果你想要學習canvas並掌握其基礎知識,以下將為你詳細介紹。 HTML與CSS基礎:在學習canvas之

See all articles