运行环境

runtime里面提供了一个Type方法,里面提供一些常用类型检测与反射相关的方法。

isArray 检测一个值是否为数组。

Type.isArray([]); // true
Type.isArray(123); // false

isObject 检测一个值是否为对象。

Type.isObject({}); // true
Type.isObject([]); // false
Type.isObject(123); // false

isString 检测一个值是否为字符串。

Type.isString("123"); // true
Type.isString(123); // false

isDate 检测一个值是否为日期。

Type.isDate(new Date()); // true
Type.isDate("2018-01-09"); // false

isRegExp 检测一个值是否为正则表达式。

Type.isRegExp(new RegExp("/\./", "g")); // true
Type.isRegExp(/\./g); // true
Type.isRegExp("2018-01-09"); // false

isFunction 检测一个值是否为函数。

Type.isFunction(Math.floor); // true
Type.isFunction(function(s){console.log(a)}); // true

isBoolean 检测一个值是否为布尔值。

Type.isBoolean(true); // true
Type.isBoolean(!!1); // true
Type.isBoolean(1); // false

isNumber 检测一个值是否为数值。

Type.isNumber(+true);  // true
Type.isNumber(1);      // true
Type.isNumber(true);   // false
Type.isNumber(+"1");   // false

isNull 检测一个值是否为 null。

Type.isNull(null);   // true
Type.isNull(true);   // false
Type.isNull(1);      // false
Type.isNull("1");    // false

isUndefined 检测一个值是否为 undefined。

Type.isUndefined(undefined);  // true
Type.isUndefined(true);       // false
Type.isUndefined(1);          // false
Type.isUndefined("1");        // false

isEmptyObject 检测一个值是否为 null 或 undefined。

Type.isEmptyObject(undefined);  // true
Type.isEmptyObject(null);       // true
Type.isEmptyObject("");         // false

isEmptyString 表示一个字符串值是否为 null 或 undefined 或 空值。

Type.isEmptyString(undefined);  // true
Type.isEmptyString(null);       // true
Type.isEmptyString("");         // true

setMetadata 设置指定类型的元数据, 在Type内部缓存一个元数据,枚举的拓展方法就是用这个实现的。

Type.setMetadata("hello", { world: "yes" });

getMetadata 获取指定类型的元数据(事先存储了同类型的数据下,才可取到值)。

Type.getMetadata("hello"); // => { world: "yes" }

getClassType 返回对象的类型(即构造函数), 字符串类型的会先eval一遍,如果是函数,可以得到真实类型。

Type.getClassType(1);                   // => Number
Type.getClassType("1");                 // => String
Type.getClassType("Math.floor");        // => floor
Type.getClassType(true);                // => Boolean
Type.getClassType(null);                // => null
Type.getClassType(undefined);           // => undefined
Type.getClassType(Math.floor);          // => Function
Type.getClassType([]);                  // => Array
Type.getClassType({});                  // => Object

isAssignableFrom 确定指定类型的实例是否可以分配给当前类型的实例。

Type.isAssignableFrom(Object, {});    // true
Type.isAssignableFrom(Array, []);     // true

getTypeString 获取指定值的类型字符串(小写)。

Type.getTypeString(1);                          // => number
Type.getTypeString("1");                        // => string
Type.getTypeString(true);                       // => boolean
Type.getTypeString(null);                       // => null
Type.getTypeString(undefined);                  // => undefined
Type.getTypeString(Math.floor);                 // => function
Type.getTypeString([]);                         // => array
Type.getTypeString({});                         // => object
Type.getTypeString(new Set());                  // => set
Type.getTypeString(new Map());                  // => map
Type.getTypeString(Symbol("id"));               // => symbol
Type.getTypeString(BigInt("0x1fffffffffffff")); // => bigint