# 常用工具

# 1. 深拷贝

function deepCopy(p, c) {
  var c = c || {};
  for (var i in p) {
    if (typeof p[i] === 'object') {
      c[i] = p[i].constructor === Array ? [] : {};
      deepCopy(p[i], c[i]);
    } else {
      c[i] = p[i];
    }
  }
  return c;
}

# 2.日期

/*时间格式化*/
Date.prototype.Format = function(fmt) {
  var o = {
    'M+': this.getMonth() + 1 /*月份*/,
    'd+': this.getDate() /*日*/,
    'h+': this.getHours() /*小时*/,
    'm+': this.getMinutes() /*分*/,
    's+': this.getSeconds() /*秒*/,
    'q+': Math.floor((this.getMonth() + 3) / 3) /*季度*/,
    S: this.getMilliseconds() /*毫秒*/,
  };
  if (/(y+)/.test(fmt))
    fmt = fmt.replace(
      RegExp.$1,
      (this.getFullYear() + '').substr(4 - RegExp.$1.length)
    );
  for (var k in o)
    if (new RegExp('(' + k + ')').test(fmt))
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      );
  return fmt;
};

/*IE浏览器不支持date(time),所以用此方法转换*/
function NewDate(fmt) {
  /*首先将日期分隔 ,获取到日期部分 和 时间部分*/
  var day = fmt.split(' ');
  /*获取日期部分的年月日*/
  var days = day[0].split('-');
  /*获取时间部分的 时分秒*/
  var mi = day[day.length - 1].split(':');
  /*获取当前date类型日期*/
  var date = new Date();
  /*给date赋值  年月日*/
  date.setUTCFullYear(days[0], days[1] - 1, days[2]);
  /*给date赋值 时分秒  首先转换utc时区 :+8*/
  date.setUTCHours(mi[0] - 8, mi[1], mi[2]);
  return date;
}

# 3. 数相关的判断

/*为空判断*/
function isEmpty(s) {
    switch (typeof(s)) {
        case 'string':
            return !s.length;
            break;
        case 'array':
        case 'object':
            for (var i in s) return false;
            return true;
            break;
        case 'undefined':
            return true;
            break;
        default:
            return !s;
            break;
    }
}

/*数字判断*/
function isNumber(s) {
    return typeof(s) == 'number' ? true : false;
}

/*整数判断*/
function isInt(s) {
    var re = /^-?\d*$/;
    return re.test(s);
}

/*正整数判断*/
function isUInt(s) {
    var re = /^\d*$/;
    return re.test(s) && s >= 0;
}

/*小数判断*/
function isDecimal(s, bit) {
    if (!arguments[1]) bit = -1;
    if (bit == -1) {
        var re = /^-?\d*.?\d*$/;
        return re.test(s);
    } else {
        var re = new RegExp('^-?\\d*.?\\d{0,' + bit + '}$');
        return re.test(s);
    }
}

/*正小数判断*/
function isUDecimal(s, bit) {
    if (!arguments[1]) bit = -1;
    if (bit == -1) {
        var re = /^\d*.?\d*$/;
        return re.test(s) && s >= 0;
    } else {
        var re = new RegExp('^\\d*.?\\d{0,' + bit + '}$');
        return re.test(s) && s >= 0;
    }
}

/*字符串判断*/
function isString(s) {
    return typeof(s) == 'string';
}

/*========================/常用函数========================*/

js onkeyup replace 自动替换
检测浮点数 只能是整数或者小数
多余的就replace 掉 的表单验证
function checkFloatNum(obj)
{
    //先把非数字的都替换掉,除了数字和.
    obj.value = obj.value.replace(/[^\d.]/g,"");
    //必须保证第一个为数字而不是.
    obj.value = obj.value.replace(/^\./g,"");
    //保证只有出现一个.而没有多个.
    obj.value = obj.value.replace(/\.{2,}/g,".");
    //保证.只出现一次,而不能出现两次以上
    obj.value = obj.value.replace(".","$#$").replace(/\./g,"").replace("$#$",".");
}