URLhttps://learnscript.net/zh/programming/data/values-and-data-types/
    复制链接转到说明  示例

    值,数据类型介绍

    我被代码海扁署名-非商业-禁演绎
    阅读 7:17·字数 2189·发布 

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