# Type

返回值的类名.

    ClassName := Type(Value)

## 返回值

类型: 字符串

函数返回 Value 的类名. 对于原始值, 返回值是以下之一:

- String(字符串)
- Integer(整数)
- Float(浮点数)

确定一个值的类名的算法可以近似地显示如下:

    TypeOf(Value)
    {
        if (comClass := ComObjType(Value, "Class")) != ""
            return comClass
        try ; `Value is Object` 没有被检查, 因为对于原型可能为假.
            if ObjHasOwnProp(Value, "__Class")
                return "Prototype"
        while Value := ObjGetBase(Value)
            if ObjHasOwnProp(Value, "__Class")
                return Value.__Class
        return "Object"
    }

对于 COM 包装器对象, 类名也可以根据变体类型来确定, 如下所示:

    ComObject_Type(obj)
    {
        if ComObjType(obj) & 0x2000 ; VT_ARRAY
            return "ComObjArray" ; ComObjArray.Prototype.__Class
        if ComObjType(obj) & 0x4000 ; VT_BYREF
            return "ComValueRef" ; ComValueRef.Prototype.__Class
        if (ComObjType(obj) = 9 || ComObjType(obj) = 13) ; VT_DISPATCH || VT_UNKNOWN
            && ComObjValue(obj) != 0
        {
            if (comClass := ComObjType(obj, "Class")) != ""
                return comClass
            if ComObjType(obj) = 9 ; VT_DISPATCH
                return "ComObject" ; ComObject.Prototype.__Class
        }
        return "ComValue" ; ComValue.Prototype.__Class
    }

## 备注

通常不应该使用此函数来确定一个值是否是数值, 因为数值 字符串 在数学表达式和大多数内置函数中都是有效的. 但是, 在某些情况下, 值的确切类型更为重要. 在这种情况下, 可以考虑用 `Value is Number` 或类似的方式代替 Type.

要检查一个值是否可以用作数字, 请使用 IsNumber, IsInteger 或 IsFloat 函数.

要检查任何类型的对象(即, 任何不是原始值的东西), 请使用 IsObject 函数.

为了检查一个值是否是一个特定类的实例, 请使用 `is` 运算符. 这甚至可以用于原始值或识别 COM 封装对象.

## 相关

值, 表达式, Is 函数, Integer, Float, String

## 示例

检索并报告存储在 a, b 和 c 中的值的确切类型.

    a := 1, b := 2.0, c := "3"
    MsgBox Type(a)  ; 整数
    MsgBox Type(b)  ; 浮点数
    MsgBox Type(c)  ; 字符串

dftg