ahjesus不断完善的js小"内裤"
String.prototype.isNullOrWhiteSpace = function () {
    ///    <summary>
    ///        变量是undefined或者null或者空字符串 出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    ///    </summary>
    ///    <returns type="Boolean" />
    if (this.trim() == "") {
        return true;
    }
    else if (this == null) {
        return true;
    }
    else {
        return false;
    }
}
String.prototype.trim = function () {
    ///    <summary>
    ///        去除左右所有空格
    ///    </summary>
    ///    <returns type="String" />
    return this.replace(/(^\s*)|(\s*$)/g, "");
}
String.prototype.ltrim = function () {
    ///    <summary>
    ///        去除左所有空格 出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    ///    </summary>
    ///    <returns type="String" />
    return this.replace(/(^\s*)/g, "");
}
String.prototype.rtrim = function () {
    ///    <summary>
    ///        去除右所有空格
    ///    </summary>
    ///    <returns type="String" />
    return this.replace(/(\s*$)/g, "");
}
String.prototype.isNumber = function () {
    ///    <summary>
    ///        是否是数字
    ///    </summary>
    ///    <returns type="Boolean" />
    return this != "" && !isNaN(this);
}
Number.prototype.isNumber = function () {
    ///    <summary>
    ///        是否是数字 出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    ///    </summary>
    ///    <returns type="Boolean" />
    return this.toString().isNumber();
}
String.prototype.toFix = function (fix, isComplement) {
    ///    <summary>
    ///        去掉多余小数并且不四舍五入
    ///    </summary>
    ///    <param name="fix" type="int">
    ///        要保留的小数位数 出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    ///    </param>
    ///    <param name="isComplement" type="string">
    ///        是否补位 true false
    ///    </param>
    ///    <returns type="Number" />
    if (this.isNumber() && fix.isNumber()) {
        var array = this.split('.');
        if (array.length > 1 && fix.toString().split('.').length == 1) {
            if (fix <= 0) {
                return Number(array[0]);
            }
            if (isComplement == "true") {
                while (array[1].length < fix) {
                    array[1] += "0";
                }
                return array[0] + "." + array[1].substring(0, fix);
            }
            return Number(array[0] + "." + array[1].substring(0, fix));
        }
        else {
            if (isComplement == "true") {
                var point = "";
                while (point.length < fix) {
                    point += "0";
                }
                return this.toString() + "." + point;
            }
        }
    }
    return Number(this);
}
Number.prototype.toFix = function (fix, isComplement) {
    ///    <summary>
    ///        去掉多余小数并且不四舍五入
    ///    </summary>
    ///    <param name="fix" type="int">
    ///        要保留的小数位数
    ///    </param>
    ///    <param name="isComplement" type="string">
    ///        是否补位 true false
    ///    </param>
    ///    <returns type="Number" />
    return this.toString().toFix(fix.toString(), isComplement);
}
Number.prototype.fAdd = function (arg2) {
    ///    <summary>
    ///        浮点加法运算(解决JS浮点运算的bug)
    ///    </summary>
    ///    <param name="arg2" type="int">
    ///        右表达式 出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    ///    </param>
    ///    <returns type="Number" />
    var arg1 = this.toString();
    var r1, r2, m;
    try {
        r1 = arg1.toString().split(".")[1].length
    } catch (e) { r1 = 0 }
    try {
        r2 = arg2.toString().split(".")[1].length
    } catch (e) { r2 = 0 }
    m = Math.pow(10, Math.max(r1, r2));
    return Number((arg1 * m + arg2 * m) / m);
}
Number.prototype.fSub = function (arg2) {
    ///    <summary>
    ///        浮点减法运算(解决JS浮点运算的bug)
    ///    </summary>
    ///    <param name="arg2" type="int">
    ///        右表达式
    ///    </param>
    ///    <returns type="Number" />
    var arg1 = this.toString();
    var r1, r2, m, n;
    try {
        r1 = arg1.toString().split(".")[1].length
    } catch (e) { r1 = 0 }
    try {
        r2 = arg2.toString().split(".")[1].length
    } catch (e) { r2 = 0 }
    m = Math.pow(10, Math.max(r1, r2));
    //动态控制精度长度    出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    n = (r1 >= r2) ? r1 : r2;
    return Number(((arg1 * m - arg2 * m) / m).toFixed(n));
}
Number.prototype.fMul = function (arg2) {
    ///    <summary>
    ///        浮点乘法运算(解决JS浮点运算的bug)
    ///    </summary>
    ///    <param name="arg2" type="int">
    ///        右表达式
    ///    </param>
    ///    <returns type="Number" />
    var arg1 = this;
    var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    try {
        m += s1.split(".")[1].length
    } catch (e) { }
    try {
        m += s2.split(".")[1].length
    } catch (e) { }
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}
Number.prototype.fDiv = function (arg2) {
    ///    <summary>
    ///        浮点除法运算(解决JS浮点运算的bug)
    ///    </summary>
    ///    <param name="arg2" type="int">
    ///        右表达式
    ///    </param>
    ///    <returns type="Number" />
    var arg1 = this;
    var t1 = 0, t2 = 0, r1, r2;
    try {
        t1 = arg1.toString().split(".")[1].length
    } catch (e) { }
    try {
        t2 = arg2.toString().split(".")[1].length
    } catch (e) { }
    with (Math) {
        r1 = Number(arg1.toString().replace(".", ""));
        r2 = Number(arg2.toString().replace(".", ""));
        return Number((r1 / r2) * pow(10, t2 - t1));
    }
}
function strToJson(str) {
    ///    <summary>
    ///        字符串转json
    ///    </summary>
    ///    <param name="str" type="String">
    ///        要转换的字符串 出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    ///    </param>
    ///    <returns type="Object" />
    var json = (new Function("return " + str))();
    return json;
}
String.prototype.toJson = function (formatStr) {
    ///    <summary>
    ///        字符串转json
    ///    </summary>
    ///    <returns type="Object" />
    return (new Function("return " + this))();
}
Array.prototype.toJson = function () {
    var o = this;
    var r = [];
    if (typeof o == "string") return "\"" + o.replace(/([\'\"\\])/g, "\\$1").replace(/(\n)/g, "\\n").replace(/(\r)/g, "\\r").replace(/(\t)/g, "\\t") + "\"";
    if (typeof o == "object") {
        if (!o.sort) {
            for (var i in o)
                r.push(i + ":" + o[i].toJson());
            if (!!document.all && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)) {
                r.push("toString:" + o.toString.toString());
            }
            r = "{" + r.join() + "}";
        } else {
            for (var i = 0; i < o.length; i++) {
                r.push(o[i].toJson());
            }
            r = "[" + r.join() + "]";
        }
        return r;
    }
    return o.toString();
}
function jsonDateFormat(jsonDate) {
    ///    <summary>
    ///        json日期格式转换为正常格式
    ///    </summary>
    ///    <param name="jsonDate" type="String">
    ///        json日期
    ///    </param>
    ///    <returns type="String" />
    try {//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
        var date = new Date(parseInt(jsonDate.replace("/Date(", "").replace(")/", ""), 10));
        var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
        var day = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
        var hours = date.getHours();
        var minutes = date.getMinutes();
        var seconds = date.getSeconds();
        var milliseconds = date.getMilliseconds();
        milliseconds = myPow(10, (3 - milliseconds.toString().length)).toString().substr(1) + milliseconds.toString();
        return date.getFullYear() + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds + "." + milliseconds;
    } catch (ex) {//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
        return "";
    }
    /*
    快速幂计算,传统计算方式如果幂次是100就要循环100遍求值
    快速幂计算只需要循环7次即可
    求x的y次方 x^y可以做如下分解
    把y转换为2进制,设第n位的值为i,计算第n位的权为x^(2^(n-1)*i)
    例如2^12
    12的二进制是1100
    12=2^3*1+2^2*1+2^1*0+2^0*0
    因此2^12=2^(2^3+2^2)
    分解得到2^12=2^(2^3)*2^(2^2)
    */
    function myPow(dx, dy) {
        var r = 1;
        while (dy != 0) {
            var b = dy & 1; //取最末尾的一位数,也可以判断奇偶数,奇数:1,偶数:0
            if (b) {//如果最末尾的数是1,储存有效值
                r *= dx;
            }
            dx *= dx; //这里即完成了x^(2^(n-1)*i)的计算
            dy >>= 1; //右位移去掉末尾1位,也可以看成是除以2取整数
        }
        return r;
    }
}
String.prototype.toPriceString = function () {
    var arr = this.split('.');
    var left = arr[0];
    var right = "00";
    if (arr.length > 1) {
        right = arr[1];
        var rightL = right.length;
        if (rightL < 2) {
            right += "0";
        }
        else if (rightL > 2) {
            right = right.substring(0, 2);
        }
    }
    var res = new Array();
    while (left.length > 3) {
        res[res.length] = left.substr(-3);
        left = left.substring(0, left.length - 3);
    }
    res[res.length] = left;
    return res.reverse().join(',');
};
Number.prototype.toPriceString = function () {
    return this.toString().toPriceString();
};
String.prototype.toUsuDate = function (formatStr) {
    ///    <summary>
    ///        json日期格式转换为正常格式
    ///    </summary>
    ///    <param name="formatStr" type="String">
    ///        格式化字符串格式 yyyy-mm-dd hh:mm:ss.fff 可以从尾部开始省略格式,不能截断或者从头开始省略
    /// 可以是yy-m-d 或者yy-mm-d等等 出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    ///    </param>
    ///    <returns type="String" />
    if (formatStr == undefined || formatStr == null || formatStr == "") {
        return jsonDateFormat(this);
    }
    var formatArr = formatStr.split(/[-\s:\.]/g);
    var dateArr = jsonDateFormat(this).split(/[-\s:\.]/g);
    var resultData = [];
    if (formatArr.length > 7 || dateArr < 2) {
        return "0000-00-00";
    }
    for (var i = 0, j = formatArr.length; i < j; i++) {
        switch (i) {
            case 0:
                var len = formatArr[i].length;
                dateArr[i] = dateArr[i].substr(-len);
                resultData[i] = dateArr[i];
                break;
            case 1:
                if (dateArr[i] < 10) {
                    var len = formatArr[i].length;
                    dateArr[i] = dateArr[i].substr(-len);
                }
                resultData[i] = "-" + dateArr[i];
                break;
            case 2:
                if (dateArr[i] < 10) {
                    var len = formatArr[i].length;
                    dateArr[i] = dateArr[i].substr(-len);
                }
                resultData[i] = "-" + dateArr[i];
                break;
            case 3:
                if (dateArr[i] < 10) {
                    var len = formatArr[i].length;
                    dateArr[i] = dateArr[i].substr(-len);
                }
                resultData[i] = " " + dateArr[i];
                break;
            case 4:
                if (dateArr[i] < 10) {
                    var len = formatArr[i].length;
                    dateArr[i] = dateArr[i].substr(-len);
                }
                resultData[i] = ":" + dateArr[i];
                break;
            case 5:
                if (dateArr[i] < 10) {
                    var len = formatArr[i].length;
                    dateArr[i] = dateArr[i].substr(-len);
                }
                resultData[i] = ":" + dateArr[i];
                break;
            case 6:
                var len = formatArr[i].length;
                resultData[i] = "." + dateArr[i].substr(-len);
                break;
            default:
        }
    }
    return resultData.join('');
}
function GetRequest() {
    ///    <summary>
    ///        获取url中"?"符后的字串
    ///     使用方法:
    ///     var Request = new Object();
    ///     Request = GetRequest();
    ///     var 参数1, 参数2, 参数3, 参数N;
    ///     参数1 = Request['参数1'];
    ///     参数2 = Request['参数2'];
    ///     参数3 = Request['参数3'];
    ///     参数N = Request['参数N'];
    ///    </summary>
    ///    <returns type="String" />
    var url = location.search;
    var theRequest = new Object();
    if (url.indexOf("?") != -1) {
        var str = url.substr(1);
        strs = str.split("&");
        for (var i = 0; i < strs.length; i++) {
            theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
        }
    }
    return theRequest;
}
var Request = (function () {
    ///    <summary>
    ///        获取url中"?"符后的字串
    ///     使用方法:
    ///     参数1 = Request['参数1'];
    ///     参数2 = Request['参数2'];
    ///     参数3 = Request['参数3'];
    ///     参数N = Request['参数N'];
    ///    </summary>
    ///    <returns type="String" />
    var url = location.search;
    var theRequest = new Object();
    if (url.indexOf("?") != -1) {
        var str = url.substr(1);
        strs = str.split("&");
        for (var i = 0; i < strs.length; i++) {
            theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
        }
    }
    return theRequest;
})();
function isNullObj(obj) {
    ///    <summary>
    ///        对象是否有值
    ///    </summary>
    ///    <param name="obj" type="Object">
    ///        对象obj 出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    ///    </param>
    ///    <returns type="Boolean" />
    for (var i in obj) {
        return false;
    }
    return true;
}
//Object.prototype.hasValue = function () {//Object的原型链增加方法会影响到jq和ztree
//    ///    <summary>
//    ///        对象是否有值
//    ///    </summary>
//    ///    <param name="obj" type="Object">
//    ///        对象obj
//    ///    </param>
//    ///    <returns type="Boolean" />
//    for (var i in this) {
//        return false;
//    }
//    return true;
//}
Serialize = function (obj) {
    ///    <summary>
    ///        对象序列化
    ///    </summary>
    ///    <param name="obj" type="Object">
    ///        任意数据类型
    ///    </param>
    ///    <returns type="String" />
    function __typeof__(objClass) {
        if (objClass && objClass.constructor) {
            var strFun = objClass.constructor.toString();
            var className = strFun.substr(0, strFun.indexOf('('));
            className = className.replace('function', '');
            return className.replace(/(^\s*)|(\s*$)/ig, '');
        }
        return typeof (objClass);
    };
    var type = __typeof__(obj);
    switch (type) {
        case 'Array':
            {
                var strArray = '[';
                for (var i = 0 ; i < obj.length ; ++i) {
                    var value = '';
                    if (obj[i]) {
                        value = Serialize(obj[i]);
                    }
                    strArray += value + ',';
                }
                if (strArray.charAt(strArray.length - 1) == ',') {
                    strArray = strArray.substr(0, strArray.length - 1);
                }
                strArray += ']';
                return strArray;
            }
        case 'Date':
            {
                return 'new Date(' + obj.getTime() + ')';
            }
        case 'Function': {
            return obj;
        }
        case 'Number':
        case 'number':
        case 'Boolean':
        case 'String':
            {
                return "'" + obj.toString() + "'";
            }
        default:
            {
                var serialize = '{';
                for (var key in obj) {
                    if (key == 'Serialize') continue;
                    var subserialize = 'null';
                    if(obj.hasOwnProperty(key)){
                        if (obj[key] != undefined) {
                            subserialize = Serialize(obj[key]);
                        }
                        serialize += '\r\n' + key + ' : ' + subserialize + ',';
                    }
                }
                if (serialize.charAt(serialize.length - 1) == ',') {
                    serialize = serialize.substr(0, serialize.length - 1);
                }
                serialize += '\r\n}';
                return serialize;
            }
    }
};
//sandbox
(function () {
    var method;
    var noop = function () { };
    var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});
    while (length--) {
        method = methods[length];
        // Only stub undefined methods.
        if (!console[method]) {
            console[method] = noop;
        }
    }
}());
var sandbox = new _sandbox();
/*
sandbox.console.log("123"); //输出log
sandbox.console.close(); //关闭沙箱控制台
sandbox.exec(function () { console.log("333"); });//执行一个代码块
sandbox.exec.close(); //关闭沙箱方法执行块
sandbox.close(); //关闭整个沙箱
*/
function _sandbox() {
    ///    <summary>
    ///        沙箱模式 出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    ///    </summary>
    window.sandboxConfig = {
        stop_exec: false
    };
};
_sandbox.prototype.close = function () {
    this.console.close();
    this.exec.close();
};
_sandbox.prototype.console = (function () {
    return window.console;
}());
_sandbox.prototype.console.close = function () {
    var noop = function () { };
    var methods = [
'assert', 'clear', 'count', 'debug', 'dir', 'dirxml', 'error',
'exception', 'group', 'groupCollapsed', 'groupEnd', 'info', 'log',
'markTimeline', 'profile', 'profileEnd', 'table', 'time', 'timeEnd',
'timeStamp', 'trace', 'warn'
    ];
    var length = methods.length;
    var console = (window.console = window.console || {});
    while (length--) {
        method = methods[length];
        console[method] = noop;
    }
};
_sandbox.prototype.exec = function (func) {
    if (!window.sandboxConfig.stop_exec) {
        if (typeof (func) == "function") {
            func();
        }
    } //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    return this;
};
_sandbox.prototype.exec.close = function () {
    window.sandboxConfig.stop_exec = true;
};
function clone(jsonObj) {
    var buf;
    if (jsonObj instanceof Array) {
        buf = [];
        var i = jsonObj.length;
        while (i--) {
            buf[i] = arguments.callee(jsonObj[i]);
        }
        return buf;
    } else if (typeof jsonObj == "function") {
        return jsonObj;
    } else if (jsonObj instanceof Object) {
        buf = {};
        for (var k in jsonObj) {
            buf[k] = arguments.callee(jsonObj[k]);
        }
        return buf;
    } else {
        return jsonObj;
    }
}
ahjesus不断完善的js小"内裤"的更多相关文章
- 一个js小游戏----总结
		花了大概一天左右的功夫实现了一个js小游戏的基本功能,类似于“雷电”那样的小游戏,实现了随即怪物发生器,碰撞检测,运动等等都实现了,下一个功能是子弹轨迹,还有其他一些扩展功能,没有用库,也没有用web ... 
- React.js 小书 Lesson16 - 实战分析:评论功能(三)
		作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson16 转载请注明出处,保留原文链接和作者信息. 接下来的代码比较顺理成章了.修改 Commen ... 
- React.js 小书 Lesson15 - 实战分析:评论功能(二)
		作者:胡子大哈 原文链接:http://huziketang.com/books/react/lesson15 转载请注明出处,保留原文链接和作者信息. 上一节我们构建了基本的代码框架,现在开始完善其 ... 
- js小功能整理
		/** * 判断是否包含字符串某字符串 * @param {[type]} str [被检测的字符串] * @param {[type]} substr [检测是否含有的字符串] * @return ... 
- [转载]Js小技巧||给input type=“password”的输入框赋默认值
		http://www.cnblogs.com/Raywang80s/archive/2012/12/06/2804459.html [转载]Js小技巧||给input type="passw ... 
- 一些js小题(一)
		一些js小题,掌握这些对于一些常见的面试.笔试题应该很有帮助: var a=10; function aa(){ alert(a); } function bb(){ aa(); } bb();//1 ... 
- 第24篇 js小知识和“坑”
		前面说了说了js的相关知识,基本上除了语法外,把项目常用的知识做了一个梳理,现在说下js的其它方面的知识,这些知识不成体系,属于不理解对于一般开发没什么太多影响,但如果理解清楚,可以更好去开发. js ... 
- React.js 小书介绍
		React.js 小书 Github 关于作者 这是一本关于 React.js 的小书. 因为工作中一直在使用 React.js,也一直以来想总结一下自己关于 React.js 的一些知识.经验.于是 ... 
- React.js小书总结
		(迁移自旧博客2017 08 27) 第一阶段 react的组件相当于MVC里面的View. react.js 将帮助我们将界面分成了各个独立的小块,每一个块就是组件,这些组件之间可以组合.嵌套,就成 ... 
随机推荐
- 调用 webapi的put和delete 报"Method Not Allowed"   405  错误。
			修改引用到webapi的Dll文件对应的项目的web.config 选择生成读写方法webapi会生成四个读写的方法(CRUD),两个获取数据的.一个更新.一个删除,默认情况下更新和删除是不对外开外的 ... 
- 专访Linux嵌入式开发韦东山操作系统图书作者--转
			CSDN学院讲师韦东山:悦己之作,方能悦人 发表于2015-04-28 08:09| 6669次阅读| 来源CSDN| 24 条评论| 作者夏梦竹 专访Linux嵌入式开发韦东山操作系统图书作者 摘要 ... 
- List的遍历和删除元素
			package test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public c ... 
- 为Ubuntu笔记本电脑设置WiFi热点共享上网
			该文由土木坛子转译而来,说是转译,其实看截图就可以方便的设置,没有任何命令,全是图形界面,方便容易.我们都知道怎样在 windows 7 系统上如何设计 Wifi 热点,当你只有一条网线,多台计算机的 ... 
- 比特(bit)与字节(byte)区别,站位比较
			“字节”(Byte) “比特”(Bit) 当你进行网络下载的时候它们会经常出现,同时你获取的速度指示也都以比特/每秒或者字节/每秒来显示. 现在就来弄清楚比特(Bit).字节(Byte)和千字节(Kb ... 
- css3,background-clip/background-origin的使用场景,通俗讲解
			先不说background-clip/background-origin的用法,我们先来聊聊css背景方面的知识. <!DOCTYPE html> <html lang=" ... 
- Web程序员开发App系列 - 认识HBuilder
			Web程序员开发App系列 Web程序员开发App系列 - 认识HBuilder Web程序员开发App系列 - 申请苹果开发者账号 Web程序员开发App系列 - 调试Android和iOS手机代码 ... 
- ubuntu启动器和dash里应用图标不正常
			在以下目录: /usr/share/applications~/.local/share/applications 添加或编辑(pycharm图标不正常):jetbrains-pycharm.desk ... 
- nodejs中常用加密算法
			在常用的nodejs+express工程中,为了安全在登录及表单传输时,应该都需进行加密传输,目前个人常用到的加密方式有下列几种: 1.Hash算法加密: 创建一个nodejs文件hash.js,输入 ... 
- 如何自学Android--转
			原文地址:http://blog.csdn.net/lavor_zl/article/details/51217319 1. Java知识储备 本知识点不做重点讲解: 对于有基础的同学推荐看<J ... 
