Type

返回值的类名.

ClassName := Type(Value)

返回值

类型: 字符串

函数返回 Value 的类名.

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

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, IsIntegerIsFloat 函数.

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

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

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

示例

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

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