值,資料型別介紹
值
你可將程式設計世界籠統的分為兩個部分,資料和對資料的處理,而值正是資料的具體內容,比如,學生的年齡為23
,23
就是一個值。
並非所有的值都擁有具體和直觀的表現,在物件導向程式設計語言中,值可以是物件,如果希望描述他,就不像解釋年齡為23
那麽簡單了。當然,物件涵蓋的範圍可能是模糊的,在一些語言中,數值本身就是物件。
值的表示
值一般具有以下兩種表示形式,書寫常值和書寫擁有運算結果的運算式。嚴格的說,常值是運算式的一種,但與其他運算式相比,常值較為簡單並且不包含運算。
什麽是常值?
常值,一般是指程式碼中直接書寫的固定值,或固定值對應的程式碼文字。比如,在上面的學生年齡的例子中,23
就是一個常值。
在下面的 JavaScript 程式碼中,所書寫的'你有一條新的短信'
,1
,都是常值。
// '你有一條新的短信' 是常值
let message = '你有一條新的短信'
// 1 是常值
let number = 1
// message 不是常值,因為他表示的不是固定值
let message2 = message
變數,常數
以上程式碼中的message
,number
,message2
是程式設計語言中的變數,關於變數,你可以檢視變數,常數介紹,變數與常數的區別一節。
常值和直接值之間的區別
常值有時也被稱為直接值,但有種觀點卻認為常值和直接值是不同的,理由是其對應的程式碼文字不同,比如,在 JavaScript 中,物件有兩種不同的寫法,{}
和new Object()
,該觀點將其中一種寫法認定為常值,另一種認定為直接值。
不過,我認為常值和直接值是相同的概念,因為,沒有規定要求常值的表現形式必須是單一的,{}
和new Object()
可以同時成為表示物件的常值。
什麽是運算式?
要說明運算式,我們需要先了解陳述式,陳述式是程式設計語言中的最小功能單位,比如,定義陳述式,指派陳述式等。而運算式是和陳述式類似的概念,只不過運算式通常是具有運算結果的,比如,1+2
就是一個運算式,他的運算結果為3
。
在下面的 JavaScript 程式碼中,所書寫的Date.now()
是一個運算式,他的運算結果是表示目前時間戳記的數值。
// Date.now() 是運算式
let timestamp = Date.now()
// 顯示目前時間戳記
console.log(`目前時間戳記:${timestamp}`)
目前時間戳記:1704198816923
空值
空值是一種特殊的值,用來表示資料內容為空的情況,其對應的關鍵字主要有null
和none
,其大小寫視具體語言而定。空值類似於數學中的0
,0
可以用來表示沒有,其本身是一個數值。
下面的 JavaScript 程式碼顯示了空值null
。
// 顯示 null 值
console.log(null)
null
資料型別
值是資料的具體內容,因此,資料型別也就是值的型別,這對於程式設計語言是有意義的,即便他們中的一些不需要開發人員明確指定,但在實際的執行過程中,每一個值都具有其對應的資料型別。
雖然,不同語言所支援的資料型別所有差別,但以下幾種是普遍存在的。
- 整數型別
- 整數型別是數值型別的一種,用於表示整數,根據占用儲存空間的不同,可以細分為多種子型別,比如,長整數型別。
- 小數型別
- 小數型別是數值型別的一種,用於表示小數,根據小數點位置的確定方式,可以分為浮點數型別和定點數型別,當然,他們也可以根據占用儲存空間的不同繼續細分。
- 布林型別
- 布林型別可以被理解為特殊的數值型別,他只有兩種狀態,真或假,一般對應了關鍵字
true
和false
,其大小寫視具體語言而定。 - 字串型別
- 字串型別用於表示文字資訊,一般通過成對的
"
或'
來界定。 - 日期時間型別
- 日期時間型別用於表示日期時間,一般對應一個或多個與日期時間相關的類別。
同一種運算對於不同資料型別的運算結果可能不同
相同的運算,對於不同資料型別的值,其運算結果可能是不同的。比如,數值型別1+2
的結果是數值3
,而字串型別'1'+'2'
的結果是字串'12'
。
資料型別轉換
在程式執行階段,值的資料型別可能會與預期的資料型別不一致,此時就需要進行資料型別的轉換。大部分情況下,轉換可以自動完成,也就是所謂的隱含轉換,如果轉換會導致資料的丟失,那麽將要求進行明確轉換。
什麽是資料型別的隱含轉換?
如果一個值從目前資料型別轉換為目標資料型別後,其表示的內容不會丟失,那麽就可以進行隱含轉換。比如,整數型別10000
可以隱含轉換為長整數型別,因為,長整數型別包含整數型別所能表示的數值,不會造成數值的某一部分丟失。
什麽是資料型別的明確轉換?
明確轉換也被稱為強製轉換,如果值的資料型別發生轉換後,其表示的內容丟失或部分丟失,那麽就需要進行明確轉換。
資料型別的明確轉換不確保內容不會丟失
需要指出,明確轉換並不能保證值對應的內容在轉換後不會丟失,他只是確保轉換可以進行。
在下面的 C# 程式碼中,我們將長整數型別100000000000000L
轉換為整數型別,由於100000000000000L
超出了整數型別的表示範圍,最終得到的結果為276447232
。
unchecked
{
// 整數型別無法表示數值 100000000000000L
Console.WriteLine((int)100000000000000L);
}
276447232
資料型別轉換的優先順序
在資料型別的隱含轉換過程中,不同資料型別的優先順序不同,優先順序較低的資料型別,會轉換為優先順序較高的資料型別,然後再參與相關運算。
比如,在 JavaScript 中,字串型別的優先順序比數值型別高,運算式1+'2'
中的數值型別1
會隱含轉換為字串型別,最終的運算結果為'12'
。
// 1 會隱含轉換為 '1'
console.log(1 + '2')
12
程式碼
values_and_data_types.js·codebeatme/programming·GitHub
values_and_data_types.cs·codebeatme/programming·GitHub