wumi_blog icon indicating copy to clipboard operation
wumi_blog copied to clipboard

判断非空 Date , dom是否含有某属性 , ~~运算 , 使用一元加(+)模拟Number()函数

Open 5Mi opened this issue 8 years ago • 2 comments

  • 判断非空
/*判断非空*/
export function isEmpty(val) {
    if (val == null)
        return true;
    if (val == undefined || val == 'undefined')
        return true;
    if (val == "")
        return true;
    if (val.length == 0)
        return true;
    // !    \s 匹配空白   *零个或若干
    return !/[^(^\s*)|(\s*$)]/.test(val);
}
  • Date
    //今天
let date = new Date();
//月份0-11 需加1
let [yy,mm,dd] = [date.getFullYear(), date.getMonth() + 1, date.getDate()];
  • 是否含有某属性
//是否含有属性
    function hasAttr(dom, attr) {
        let str = dom.getAttribute(attr);
        return typeof str != "undefined" && str != "false" && str !== null;
    }

5Mi avatar Jun 23 '16 03:06 5Mi

~~

将操作数转化为 32 位有符号整数。

~~ null // 0
~~ undefined // 0
~~ NaN // 0
~~ {} // 0
~~ true // 1
~~ '' // 0
~~ 'string' // 0  注意这里是0
~~ '1' // 1
~~ Number.POSITIVE_INFINITY // 0

~~ 1.2 // 1
~~ -1.2 // -1
~~ 1.6 // 1
~~ -1.6 // -1
~~ (Math.pow(2, 31) - 1) // 2147483647 = 2^31-1
~~ (Math.pow(2, 31)) // -2147483648 = -2^31
~~ (-Math.pow(2, 31)) // -2147483648 = -2^31
~~ (-Math.pow(2, 31) - 1) // 2147483647 = 2^31-1
~~ (Math.pow(2, 32)) // 0

参考

5Mi avatar Jun 13 '17 08:06 5Mi

使用一元加(+)模拟Number()函数

原理:对非数值类型的数据使用一元加(+),会起到与Number()函数相同的效果。

  • null转换为0
  • undefined转换为NaN
  • false转换为0,true转换为1
  • 对于字符串:
    • 空字串转换为0
    • 含有数字或者浮点数或者十六进制格式的数据(11, 0.3, 0xfe等),转换为相应的数值
    • 含有其他格式字符,无法转换为数值的字符串,转换为NaN
  • 对于对象,先调用valueOf()方法,在转换,若结果为NaN,那么再调用toString()方法,之后再转换

5Mi avatar Jun 27 '17 08:06 5Mi