a:=[1]
MsgBox % type(a)

MsgBox % type("")     ; String
MsgBox % type(1)      ; Integer
MsgBox % type(1/1)    ; Float
MsgBox % type("1")    ; String
MsgBox % type(2**42)  ; Integer

; 这取决于以下几点:
; 与变量不同,数组元素不能同时包含字符串和纯数字。
; 字段的“容量”是在需要扩展之前它可以容纳的字符串大小。如果它不包含字符串,则它没有容量。
; SetFormat 尚未用于从浮点字符串格式中删除小数点。(如果 var 是 float具有相同的限制,因为它总是将值转换为字符串进行分析。)

; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=2306
; 对象版本 - 取决于当前的浮点格式,包括小数点。
type(v) {
    if IsObject(v)
        return "Object"
    return v="" || [v].GetCapacity(1) ? "String" : InStr(v,".") ? "Float" : "Integer"
}

; 汉化版
类型判断(v) {
  if IsObject(v)
    Return "对象"
  Return v="" || [v].GetCapacity(1) ? "字符串" : InStr(v,".") ? "浮点数" : "整数"
}



; 示例
array := [1, 2, 3]
dict := { key1 : "value1", key2 : "value2" }
MsgBox % IsObjectArrayOrDict(dict)

; 自定义函数,判断对象是数组、字典还是其他类型
IsObjectArrayOrDict(obj) {
    if (!IsObject(obj))
        Return "不是对象"
    else if (obj.Length() && obj[1])
        Return "数组"
    Return "字典"
}



; COM版 - 报告 32 位范围之外的整数类型错误。
; type(ByRef v) {
; 	if IsObject(v)
; 		return "Object"
; 	a := ComObjArray(0xC, 1)
; 	a[0] := v
; 	DllCall("oleaut32\SafeArrayAccessData", "ptr", ComObjValue(a), "ptr*", ap)
; 	type := NumGet(ap+0, "ushort")
; 	DllCall("oleaut32\SafeArrayUnaccessData", "ptr", ComObjValue(a))
; 	return type=3?"Integer" : type=8?"String" : type=5?"Float" : type
; }

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。