URLhttps://learnscript.net/zh-hant/programming/data/values-and-data-types/
    複製連結移至說明  範例

    值,資料型別介紹

    閱讀 7:20·字數 2202·發佈 
    Youtube 頻道
    訂閱 375

    你可將程式設計世界籠統的分為兩個部分,資料和對資料的處理,而值正是資料的具體內容,比如,學生的年齡為2323就是一個值。

    並非所有的值都擁有具體和直觀的表現,在物件導向程式設計語言中,值可以是物件,如果希望描述他,就不像解釋年齡為23那麽簡單了。當然,物件涵蓋的範圍可能是模糊的,在一些語言中,數值本身就是物件。

    值的表示

    值一般具有以下兩種表示形式,書寫常值和書寫擁有運算結果的運算式。嚴格的說,常值是運算式的一種,但與其他運算式相比,常值較為簡單並且不包含運算。

    什麽是常值?

    常值,一般是指程式碼中直接書寫的固定值,或固定值對應的程式碼文字。比如,在上面的學生年齡的例子中,23就是一個常值。

    在下面的 JavaScript 程式碼中,所書寫的'你有一條新的短信'1,都是常值。

    values_and_data_types.js
    // '你有一條新的短信' 是常值
    let message = '你有一條新的短信'
    // 1 是常值
    let number = 1
    // message 不是常值,因為他表示的不是固定值
    let message2 = message

    變數,常數

    以上程式碼中的messagenumbermessage2是程式設計語言中的變數,關於變數,你可以檢視變數,常數介紹,變數與常數的區別一節。

    常值和直接值之間的區別

    常值有時也被稱為直接值,但有種觀點卻認為常值和直接值是不同的,理由是其對應的程式碼文字不同,比如,在 JavaScript 中,物件有兩種不同的寫法,{}new Object(),該觀點將其中一種寫法認定為常值,另一種認定為直接值。

    不過,我認為常值和直接值是相同的概念,因為,沒有規定要求常值的表現形式必須是單一的,{}new Object()可以同時成為表示物件的常值。

    什麽是運算式?

    要說明運算式,我們需要先了解陳述式,陳述式是程式設計語言中的最小功能單位,比如,定義陳述式,指派陳述式等。而運算式是和陳述式類似的概念,只不過運算式通常是具有運算結果的,比如,1+2就是一個運算式,他的運算結果為3

    在下面的 JavaScript 程式碼中,所書寫的Date.now()是一個運算式,他的運算結果是表示目前時間戳記的數值。

    values_and_data_types.js
    // Date.now() 是運算式
    let timestamp = Date.now()
    // 顯示目前時間戳記
    console.log(`目前時間戳記:${timestamp}`)
    目前時間戳記:1704198816923

    空值

    空值是一種特殊的值,用來表示資料內容為空的情況,其對應的關鍵字主要有nullnone,其大小寫視具體語言而定。空值類似於數學中的00可以用來表示沒有,其本身是一個數值。

    下面的 JavaScript 程式碼顯示了空值null

    values_and_data_types.js
    // 顯示 null 值
    console.log(null)
    null

    資料型別

    值是資料的具體內容,因此,資料型別也就是值的型別,這對於程式設計語言是有意義的,即便他們中的一些不需要開發人員明確指定,但在實際的執行過程中,每一個值都具有其對應的資料型別。

    雖然,不同語言所支援的資料型別所有差別,但以下幾種是普遍存在的。

    整數型別

    整數型別是數值型別的一種,用於表示整數,根據占用儲存空間的不同,可以細分為多種子型別,比如,長整數型別。

    小數型別

    小數型別是數值型別的一種,用於表示小數,根據小數點位置的確定方式,可以分為浮點數型別和固定點數型別,當然,他們也可以根據占用儲存空間的不同繼續細分。

    布林型別

    布林型別可以被理解為特殊的數值型別,他只有兩種狀態,真或假,一般對應了關鍵字truefalse,其大小寫視具體語言而定。

    字串型別

    字串型別用於表示文字資訊,一般通過成對的"'來界定。

    日期時間型別

    日期時間型別用於表示日期時間,一般對應一個或多個與日期時間相關的類別。

    同一種運算對於不同資料型別的運算結果可能不同

    相同的運算,對於不同資料型別的值,其運算結果可能是不同的。比如,數值型別1+2的結果是數值3,而字串型別'1'+'2'的結果是字串'12'

    資料型別轉換

    在程式執行階段,值的資料型別可能會與預期的資料型別不一致,此時就需要進行資料型別的轉換。大部分情況下,轉換可以自動完成,也就是所謂的隱含轉換,如果轉換會導致資料的丟失,那麽將要求進行明確轉換。

    什麽是資料型別的隱含轉換?

    如果一個值從目前資料型別轉換為目標資料型別後,其表示的內容不會丟失,那麽就可以進行隱含轉換。比如,整數型別10000可以隱含轉換為長整數型別,因為,長整數型別包含整數型別所能表示的數值,不會造成數值的某一部分丟失。

    什麽是資料型別的明確轉換?

    明確轉換也被稱為強製轉換,如果值的資料型別發生轉換後,其表示的內容丟失或部分丟失,那麽就需要進行明確轉換。

    資料型別的明確轉換不確保內容不會丟失

    需要指出,明確轉換並不能保證值對應的內容在轉換後不會丟失,他只是確保轉換可以進行。

    在下面的 C# 程式碼中,我們將長整數型別100000000000000L轉換為整數型別,由於100000000000000L超出了整數型別的表示範圍,最終得到的結果為276447232

    *.cs
    unchecked
    {
    	// 整數型別無法表示數值 100000000000000L
    	Console.WriteLine((int)100000000000000L);
    }
    276447232

    資料型別轉換的優先順序

    在資料型別的隱含轉換過程中,不同資料型別的優先順序不同,優先順序較低的資料型別,會轉換為優先順序較高的資料型別,然後再參與相關運算。

    比如,在 JavaScript 中,字串型別的優先順序比數值型別高,運算式1+'2'中的數值型別1會隱含轉換為字串型別,最終的運算結果為'12'

    values_and_data_types.js
    // 1 會隱含轉換為 '1'
    console.log(1 + '2')
    12

    原始碼

    values_and_data_types.js·codebeatme/programming·GitHub
    values_and_data_types.cs·codebeatme/programming·GitHub