_is

判断模块

判断专用模块,用于各种不同的判断相关信息,函数前缀is,通常使用为Ux.isXXX

函数名 说明
isArray 判断输入值是否是一个数组(Array)类型。
isAuthorized 「引擎」判断用户是否登录并执行登录控制。
isCn 检查输入字符串是否一个合法的中文字符串,通过Unicode值执行检查。
isCollection 检查输入数据是否集合类型,集合类型包含ES6中的Set。
isCurrency 检查输入数据是否合法的货币格式数据。
isDecimal 检查输入数据是否合法的浮点数。
isDiff 检查两个数据类型(Object/Array)是否内容相同。
isEmpty 检查传入对象是否为空。
isFunction 检查传入对象是否一个合法JavaScript函数。
isIn 检查某个元素是否存在于数组中。
isInit 「引擎」从LocalStorage中读取初始化已经完成的应用程序的配置数据。
isLogged 「引擎」从SessionStorage读取登录用户。
isNotEmpty isEmpty的逆函数。
isNumber 判断输入数据是否合法整数。
isObject 判断输入数据是否合法的Object,排除Array类型。
isParent 「引擎」判断两个数据是否存在父子关系,父字段可使用第二参执行。
isQr 「引擎」判断Ajax参数是否合法的查询引擎参数。
isRoute 「引擎」判断react-router的路由路径是否存在改变。
isRule 「引擎」判断前端规则是否满足条件,针对Object。
isRuleAll 「引擎」针对Array,And连接,内置isRule。
isRuleAny 「引擎」针对Array,Or连接,内置isRule。
isSame (略)isDiff逆函数。

Methods

(static) isArray(input) → {boolean}

「标准」Ux.isArray

判断输入的值是否是一个合法的JavaScript中的Array类型。

内部调用underscore,判断输入值是否是一个合法 Array 的函数,在原生的JavaScript中通常使用 Array.prototype.isPrototypeOf 的方式来判断一个输入是否Array,而这个封装包含了特殊值的检测 目前版本看起来走underscore的流程是最靠谱的。

Parameters:
Name Type Description
input any

输入值

Returns:

是数组则返回true,不是则返回false

Type
boolean

(static) isAuthorized(reference) → {any}

「引擎」Ux.isAuthorized

登录控制专用跳转方法,如果已登录则不执行任何跳转,如果未登录则跳转到登录界面,并且加上当前页面实现target计算。

Parameters:
Name Type Description
reference Object | ReactComponent

React组件引用。

Returns:

跳转专用

Type
any

(static) isCn(literal) → {boolean}

「标准」Ux.isCn

判断当前字符串中是否是合法中文,如果包含了中文则直接返回true,主要用于当前字符串中 是否包含了中文信息,在Zero Ui中使用时,会针对列宽度计算执行中文宽度计算,而开发人员 也可以直接调用该API进行检查。

const item = "你好";
const isCn = Ux.isCn(item);  // 返回 true
Parameters:
Name Type Description
literal String

输入的原始字符串

Returns:

匹配返回true,否则返回false

Type
boolean

(static) isCollection(input) → {boolean}

「标准」Ux.isCollection

检查输入数据的类型是否一个合法的集合类型,集合类型包括:

  1. Set:ES6中的集合类型。
  2. Array:标准的JavaScript中的数组Array类型。
Parameters:
Name Type Description
input any

传入部分的数据

Returns:
Type
boolean

(static) isCurrency(literal) → {boolean}

「标准」Ux.isCurrency

判断当前字符串是否是合法货币格式,合法的货币格式包含两种:

  1. 基本浮点格式。
  2. 带千分位逗号的货币格式。
const literal = "12.33";
const literal2 = "1,135.65";
const isDecimal = Ux.isCurrency(literal);     // 返回 true
const isDecimal2 = Ux.isCurrency(literal);    // 返回 true
Parameters:
Name Type Description
literal String

输入的原始字符串

Returns:

匹配返回true,否则返回false

Type
boolean

(static) isDecimal(literal) → {boolean}

「标准」Ux.isDecimal

判断当前字符串是否是合法浮点数,合法浮点数是带一个小数点的小数。

const literal = "12.33";
const isFloat = Ux.isDecimal(literal);        // 返回 true
Parameters:
Name Type Description
literal String

输入的原始字符串

Returns:

匹配返回true,否则返回false

Type
boolean

(static) isDiff(left, right) → {boolean}

「标准」Ux.isDiff

判断两个对象是否不同,内部使用Immutable.is 判断,等价于 Java 语言中的 equals 方法:

  1. 如果是原始JS数据类型,则直接比对二者是否不同。
  2. 如果是JS中的对象(Array, Object), 则比较二者的内容是否不同。
  3. 如果是自定义的 DataArray, DataObject, 则比较二者内容是否不同。

该比对方法针对内部数据结构以及内容执行真正意义上的比对流程,所以不存在===的引用比对流程,通过比对来判断两者数据内容是否一致。 次方法的比对结果使用频率远高于===的比对。众所周知,JavaScript中的三等号在比较Object/Array时比较的是二者的引用地址是否 一致,而不是数据内容是否相同,而真实场景中通常要针对数据内容进行比对,这个API就是为这个场景而设计的。

Parameters:
Name Type Description
left Object | DataObject | DataArray

比对左值

right Object | DataObject | DataArray

比对右值

Returns:

不同返回 true,相同则返回 false

Type
boolean

(static) isEmpty(input) → {boolean}

「标准」Ux.isEmpty

判断对象是否为空或 undefined,空包括 {},以及[]。

  1. 如果 undefined,则表示为空。
  2. 如果 Object,则判断它是否包含了键,无任何键则为空。
  3. 如果 Array,则判断长度是否为0,为0就表示空。
Parameters:
Name Type Description
input any

输入的数据内容

Returns:

如果为空返回 true,否则返回 false

Type
boolean

(static) isFunction(input) → {boolean}

「标准」Ux.isFunction

内部调用underscore,判断输入值是否是一个合法的 JavaScript 函数,原生调用为 Function.prototype.isPrototypeOf 的方式来判断。

Parameters:
Name Type Description
input any

传入值

Returns:

是函数返回true,不是函数返回false

Type
boolean

(static) isInit() → {any}

「引擎」Ux.isInit

storeApp 对应的初始化应用数据读取专用方法。

// 读取当前应用数据
import Ux from 'ux';
const app = Ux.isInit();
Returns:

返回当前应用程序数据信息,如果没有则返回 {}

Type
any

(static) isLogged() → {any}

「引擎」Ux.isLogged

storeUser 对应的登录用户数据读取专用方法。

  1. 如果已登录,则可以读取用户数据。
  2. 如果未登录,则用户数据为空对象。
// 读取当前用户登录数据
import Ux from 'ux';
const user = Ux.isLogged();
Returns:

返回登录的用户数据信息,如果未登录返回 {}

Type
any

(static) isNotEmpty(input) → {boolean}

「标准」Ux.isNotEmpty

(略)isEmpty函数的逆函数,判断结果和isEmpty相反。

Parameters:
Name Type Description
input any

输入的数据内容

Returns:

如果为空返回 false,否则返回 true

Type
boolean

(static) isNumber(literal) → {boolean}

「标准」Ux.isNumber

判断当前字符串是否是合法整数,只有合法整数才会返回true。

const literal = "1233";
const isNumber = Ux.isNumber(literal);       // 返回 true
Parameters:
Name Type Description
literal String

输入的原始字符串

Returns:

匹配返回true,否则返回false

Type
boolean

(static) isObject(input) → {boolean}

「标准」Ux.isObject

是否合法对象,合法对象的满足条件如下:

  1. 如果是 undefined 则不是合法对象。
  2. 如果是 Object 还会排除 Array。

此处检查有一个和原始检查不同的点在于,检查过程中会排除Array类型,JavaScript中的Array 也是一个合法的Object,排除的目的是程序过程中Array和Object的应用场景往往不同。

Parameters:
Name Type Description
input any

输入值

Returns:

如果是合法对象则为true,否则返回false

Type
boolean

(static) isParent(input, parent, field) → {boolean}

「引擎」Ux.isParent

检查两个节点是否有父子关系,不传入 field 时,直接检查两个核心字段

  1. 标准树专用字段:parent
  2. 非标准树的专用字段:parentId

由于是引擎函数,主键不可使用其他值,只能使用React中的通用主键key,为了兼容前端很多操作,Zero Ui中统一使用key字段 作为元素、记录的唯一主键字段名,某些API可变更主键名,但大部分API(特别是引擎类)都直接使用key作主键。

Parameters:
Name Type Description
input Object

输入节点

parent Object

父节点

field String

固定字段检查

Returns:

如果 input 的 parent 是 parent,那么为 true

Type
boolean

(static) isQr(config) → {boolean}

「引擎」Ux.isQr

判断输入的配置是否合法的带查询的结构,输入的 config 必须是合法的 Object

格式1

{
    "ajax": {
        "magic":{
            "...": "< 合法可解析的查询条件模式 >"
        }
    }
}

格式2

{
    "params": {
         "criteria": {
             "...": "< 合法可解析的查询条件模式 >"
         }
    }
}

该方法比较特殊,必须配合 Zero UI 中的查询引擎执行相关处理,主要用于判断查询参数 所传入的对象必须包含以下路径下的值:

# 新格式,直接使用 ajax.magic
ajax.magic

# 旧格式(最早的查询参数)直接使用 ajax.params.criteria
ajax.params.criteria

该API是为引擎中的查询引擎量身定制的函数,用于检查一个输入参数的配置是否符合查询引擎规范, 该检查在大部分web组件中会检查请求发送的参数格式,使用Adaptor的设计模式进行重新设计,如果 参数格式是 Qr 类型,那么会执行查询引擎的参数语法,如果不是 Qr 类型则直接使用原生数据类型。

Parameters:
Name Type Description
config Object

传入的配置信息

Returns:

如果合法则返回true,否则返回false

Type
boolean

(static) isRoute(props, prevProps) → {boolean}

「引擎」Ux.isRoute

连接 react-router 中的路由对象执行判断,判断当前界面是否执行了路由变化,如果出现变化则返回 true,如果没出现变化则 false。 主要检查路由地址是否发生了变化。

Zero Ui对react-router执行了数据结构层面的封装,构造了新的TypeScript对象DataRouter,并且这个对象贯穿于整个 Zero Ui生成$router变量,检查时会执行path()函数的检查,检查Uri地址是否发生了改变,如果改变则执行跳转,如果 没有发生任何改变,则不需要跳转。

代码示例:

// 主页 / 动态 / 静态页面切换的 BUG
 if (Ux.isRoute(this.props, prevProps)) {
    const state = Ux.clone(this.state);
    state.$hoc = Fn.fnI18n(target, options);
    state.$op = Fn.fnOp(options);
    this.setState(state);
}

该函数通常用于静态和动态模板中实现顶层的state状态变更。

Parameters:
Name Type Description
props Object

React组件当前属性 props。

prevProps Object

React组件的前一个属性 props。

Returns:

返回是否发生路由变化的检查值。

Type
boolean

(static) isRule(record, ruleConfig) → {Boolean}

「标准」Ux.isRule

1. 基本介绍

检查记录record是否符合ruleConfig中的定义,该定义为前端查询引擎检查,配合解析表达式实现针对 数据中条件值的检查,如果符合规则,则返回true,否则返回false。

2. 规则说明

ruleConfig的数据结构如下:

{
    "field1": "<RULE>",
    "field2": "<RULE>",
    "", true / false
}

其中<RULE>的完整值列表如下:

  1. NIL:该属性必须不为空
  2. NUL:该属性必须为空
  3. GT,<N>:该属性大于某个值
  4. GE,<N>:该属性大于等于某个值
  5. LT,<N>:该属性小于某个值
  6. LE,<N>:该属性小于等于某个值
  7. EQ,<S>:该属性等于某个值
  8. NEQ,<S>:该属性不等于某个值
  9. ST,<S>:以某个字符串开始
  10. ET,<S>:以某个字符串结束
  11. CT,<S>:包含了某个字符串
  12. CF,<S>:不包含某个字符串
Parameters:
Name Type Description
record Object

输入的数据记录

ruleConfig Object

输入的规则定义

Returns:

满足规则返回true,否则返回false

Type
Boolean

(static) isRuleAll(array, ruleConfig) → {Boolean}

「标准」Ux.isRuleAll

(略),针对Array执行每个元素的isRule检查,最后用And连接。

Parameters:
Name Type Description
array Array

输入的数组记录

ruleConfig Object

输入的规则定义

Returns:

全满足则返回true,数据和数据之间用AND

Type
Boolean

(static) isRuleAny(array, ruleConfig) → {Boolean}

「标准」Ux.isRuleAny

(略),针对Array执行每个元素的isRule检查,最后用Or连接。

Parameters:
Name Type Description
array Array

输入的数组记录

ruleConfig Object

输入的规则定义

Returns:

满足一条则返回true,数据和数据之间用Or

Type
Boolean

(static) isSame(left, right) → {boolean}

「标准」Ux.isSame

(略)isDiff函数的逆函数,判断结果和isDiff相反。

Parameters:
Name Type Description
left Object | DataObject | DataArray

比对左值

right Object | DataObject | DataArray

比对右值

Returns:

不同返回 false,相同则返回 true

Type
boolean

(static) isSet(input) → {boolean}

「标准」Ux.isSet

判断输入的值是否是一个合法的Set类型对象。

内部调用underscore,判断输入是否合法的 Set 的函数。

Parameters:
Name Type Description
input any

输入值

Returns:

是Set则返回true,不是则返回false

Type
boolean

(static) isValid(input) → {boolean}

「标准」Ux.isValid

判断当前值是否可用,可用条件:

  1. undefined 不可用
  2. "" 不可用(空字符串)
  3. null 不可用
Parameters:
Name Type Description
input
Returns:
Type
boolean