20160201 String.prototype.replace() && Boolean.prototype.toString() && js 中判断为 false

replace

sting.replace( regexp | substr, newSubstr | function[, flags] )

使用字符串作为参数

替换字符串可以插入下面的特殊变量名:
- $$: 插入一个 $
- $&: 插入匹配的字符串
- $`: 插入当前匹配的字符串左边的内容
- $’: 插入当前匹配的字符串右边的内容
- $n or $nn 加入第一个参数是 RegExp 对象,并且 n 或 nn 是十进制的数字,那么插入第 n 个括号匹配的字符串。
eg: "hello world".replace("wo","$'"); // "hello rldrld"

指定一个函数作为参数

你可以指定一个函数作为第二个参数。在这种情况下,当匹配执行后, 该函数就会执行。 函数的返回值作为替换字符串。 (注意: 上面提到的特殊替换参数在这里不能被使用。)
另外要注意的是, 如果第一个参数是正则表达式, 并且其为全局匹配模式, 那么这个方法将被多次调用, 每次匹配都会被调用。

(精确的参数个数依赖于replace()的第一个参数是否是一个正则表达式对象, 以及这个正则表达式中指定了多少个括号子串。)

项目中用到的代码

export function getQueryObject(url?: string, isTypeConvert: boolean = false): any {
    url = url == null ? window.location.href : url;
    var search: string = url.substring(url.lastIndexOf("?") + 1);
    var obj = {};
    var reg = /([^?&=]+)=([^?&=]*)/g;

    search.replace(reg, function (rs, $1, $2) {
        var name = decodeURIComponent($1);
        var val = decodeURIComponent($2);

        obj[name] = val;
        return rs;
    })
    return obj;
}

对于取出 url 中的键值对,这样还不够,这样出来的键与值都是字符串,有可能需要"age" : 123 这样的结果
所以在需要时进行结果类型的转换

var val = "something";
if(typeConvert){
    if(/true|false/.test($.trim(val).toLowerCase())){
        var result = val === 'true';  // 自己写的...
    }else if($.isNumeric(val)){
        value = (<any>Number(val))
    }else{
        value = String(val);  // 为了 undefined null NaN 那些
    }
}

Boolean.prototype.toString()

bool.toString()

当一个布尔对象作为文本值或进行字符串连接时,JavaScript 会自动调用其 toString 方法。
eg: true.toString(); // "true"

js 中判断为 false

JavaScript 中下面的 6 种会被判断为 false
0 null "" false undefined NaN
用 && 和 || 的时候要注意。