简言之:
x == null // 或 x == undefined
是最简单的判断 x 为 null 或 undefined 的方式,相对应的
x != null // 或 x != undefined
是最简单的判断 x 非 null 和 undefined 的方式。这就是 ==存在的唯一意义。
日期处理 new Date(year, month, day) 注意其参数的数值范围
由于可能的历史传承原因,JS 内置对象 Date 的构造函数比较特殊。
如果 year 是 0 ~ 99 之间,year 默认加 1900。比如 1 代表公元 1901 年,99 代表公元 1999 年,100 代表公元 100 年。(你问 -1 是几?公元前 1 年。。。)
month 从 0 开始算。0 代表一月,1 代表二月,以此类推。12 代表下一年的一月(自动进位)
第一点不知道也没什么,毕竟一般不会操作公元 99 年之前的时间。但第二点就很容易出错,切记它是以 0 开始的数字。
这样得到的日期对象是本地时间(采用客户端时区)
new Date(dateString) 注意浏览器时区问题以及浏览器兼容性
时常有后端接口返回一个日期字符串的情况:
new Date('2018-01-01') // => "2018/1/1 08:00:00" 新版浏览器,IE 11
new Date('2018-01-01') // => "2018/1/1 00:00:00" 某些旧版安卓
new Date('2018-01-01') // => "Invalid Date" IE 8(这个忽略。。。)
可以看到,浏览器基本都是把日期字符串当做 UTC 时间处理的。而
new Date('2018/01/01') // => "2018/1/1 00:00:00" 包括 IE 8 在内所有浏览器
所以对于日期字符串,请注意字符串中是使用横杠还是斜杠。对于横杠可以考虑将 -替换成 /,或者补全完整的带时区的 ISO8601 字符串。接口安全调用考虑到负数时区的问题,不推荐将小时数清零的做法。
PS:将日期对象取当天 0 点为 date.setHours(0,0,0,0)PS2:取当前时间的 Unix 时间戳可以 Date.now()

补:慎用 ||填充默认值
这反而是 JS 老鸟更容易犯的错误。给用户传入的对象填充默认值是很常见的行为,他们总是随手就写:
config.prop1 = config.prop1 || 233;
config.prop2 = config.prop2 || 'balabala';
expr1||expr2的意思是:如果expr1能转换成true则返回expr1,否则返回expr2
expr1||expr2<=>Boolean(expr1)?expr1:expr2
哪些值不能转换为 true 呢?
null
undefined
NaN
0 !!!
空字符串('') !!!
如果用户指定了传入参数的值为 0 或者是空字符串的配置项,它的值就会被强制替换为默认值,然而实际上只有 undefined应该被认为是用户没有指定其值(语义上可以这样理解: null表示 用户让你给他把这个位置空着;而 undefined表示 用户没发表意见)
所以就应该是这样:
config.prop1 = config.prop1 !== undefined ? config.prop1 : 233;
config.prop2 = config.prop2 !== undefined ? config.prop2 : 'balabala';
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-88203-3.html
世界格局由美国一超独霸转向多极并起并存的时代——更是中华盛世主导世界时代的到来
如果我们有10艘这样的阿利伯克宙斯盾