base.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. const base = {
  2. /**
  3. * [isXXX 基础方法]
  4. * @param {[type]} item [description]
  5. * @return {Boolean} [description]
  6. */
  7. isUndefined(item) {
  8. return typeof item === 'undefined';
  9. },
  10. isDefined(item) {
  11. return !base.isUndefined(item);
  12. },
  13. isString(item) {
  14. return typeof item === 'string';
  15. },
  16. isNumber(item) {
  17. return typeof item === 'number';
  18. },
  19. isArray(item) {
  20. return Object.prototype.toString.apply(item) === '[object Array]';
  21. },
  22. isObject(item) {
  23. return item && typeof item === 'object' && !base.isArray(item);
  24. },
  25. isFunction(item) {
  26. return typeof item === 'function';
  27. },
  28. /**
  29. * [功能方法]
  30. * @param {[type]} item [description]
  31. * @return {Boolean} [description]
  32. */
  33. isPhone(str) {
  34. return /^1\d{10}$/.test(str);
  35. },
  36. /**
  37. * [功能方法]
  38. * @param {[type]} item [description]
  39. * @return {Boolean} [description]
  40. */
  41. isIDNum(idNum) {
  42. return /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(idNum)
  43. },
  44. /**
  45. * [公共方法]
  46. * @param {[type]} item [description]
  47. * @return {Boolean} [description]
  48. */
  49. noop() {
  50. return null;
  51. },
  52. hasOwn(obj, type) {
  53. return Object.prototype.hasOwnProperty.call(obj, type);
  54. },
  55. /**
  56. * [getXXX 增强方法]
  57. * @param {[type]} item [description]
  58. * @return {Boolean} [description]
  59. */
  60. getString(item, defaultStr) {
  61. if (base.isString(item)) return item.trim();
  62. if (base.isNumber(item)) return `${item}`.trim();
  63. return defaultStr || '';
  64. },
  65. /**
  66. * [
  67. * getNumber(0),
  68. * getNumber(-0),
  69. * getNumber('0'),
  70. * getNumber('-0'),
  71. * getNumber(123),
  72. * getNumber(-12),
  73. * getNumber(1/0),
  74. * getNumber(-1/0),
  75. * getNumber(''),
  76. * getNumber('a'),
  77. * getNumber(true),
  78. * getNumber(false),
  79. * getNumber([]),
  80. * getNumber({}),
  81. * getNumber(null),
  82. * getNumber(undefined)
  83. * ]
  84. */
  85. getNumber(item, defaultNum) {
  86. const isValidNumber =
  87. ['NaN', 'Infinity', '-Infinity'].indexOf(`${+item}`) === -1;
  88. const hasStrNumber = /\d+/.test(`${item}`);
  89. return isValidNumber && hasStrNumber ? +item : base.isDefined(defaultNum) ? defaultNum : -1;
  90. },
  91. getArray(item, defaultArr) {
  92. return base.isArray(item) ? item : defaultArr || [];
  93. },
  94. getObject(item, defaultObj) {
  95. return item && base.isObject(item) ? item : defaultObj || {};
  96. },
  97. getFunction(item) {
  98. return base.isFunction(item) ? item : null;
  99. },
  100. /**
  101. * [JSON方法]
  102. * @param {[type]} item [description]
  103. * @return {Boolean} [description]
  104. */
  105. _json(item) {
  106. let str = { type: Object.prototype.toString.call(item) };
  107. try {
  108. str = JSON.stringify(item, null, 2);
  109. } catch (e) {
  110. str.error = (e && e.message) || '';
  111. }
  112. return base.isString(str) ? str : base.getString(str, `${str}`);
  113. },
  114. _parse(item) {
  115. let obj = { type: Object.prototype.toString.call(item) };
  116. try {
  117. obj = JSON.parse(item);
  118. } catch (e) {
  119. obj.error = (e && e.message) || '';
  120. }
  121. return base.isObject(obj) ? obj : base.$parse(obj);
  122. },
  123. /**
  124. * [自定义导航方法]
  125. * @param {...[type]} arg [description]
  126. * @return {[type]} [description]
  127. */
  128. _navigateTo(obj) {
  129. const len = getCurrentPages().length;
  130. if (len >= 10) {
  131. /* eslint-disable */
  132. console.warn('[getCurrentPages] length: ', len, '. navigateTo -> redirectTo');
  133. /* eslint-enable */
  134. wx.redirectTo(obj);
  135. } else {
  136. wx.navigateTo(obj);
  137. }
  138. }
  139. };
  140. module.exports = base;