值,数据类型介绍
关注 1421
值
你可将编程世界笼统的分为两个部分,数据和对数据的处理,而值正是数据的具体内容,比如,学生的年龄为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