浏览器 Date与json 对象的兼容问题
最近遇到了两个浏览器的兼容问题,在此记录下来。
new Date 的浏览器兼容
在使用某个时间选择器插件时,判断选择时间小于当前时间时,在 IE11 浏览器下面判断出错,chrome 表现正常。
找到判断错误代码,如下:
if(new Date(contentStartTime).valueOf() > new Date().valueOf())
因为在 chrome 表现正常,IE11 下也没有报错,但是 IE11 的判断却产生问题,那我们就在 IE 下打印分析两个值,发现果然有问题。
new Date(contentStartTime) //返回值 invalid date
new Date(contentStartTime).valueOf() //返回值 NaN
那应该是 contentStartTime 这个值有问题,经查看服务器返回的值为 ‘2018-11-29 00:00:00’
原来,'xxxx-xx-xx 00:00:00’是无法在各个浏览器中使用new Date()来执行的(貌似火狐也有这种问题)。
基于’/'格式的日期字符串,才是被各个浏览器所广泛支持的,‘-’连接的日期字符串,则是只在 chrome 下可以正常工作。
所以原代码的值 NaN 和 new Date().valueOf() 对比,永远返回 false 导致判断出错。
最后改成:
new Date(contentStartTime.replace(/-/g,"/")).valueOf() > new Date().valueOf())
Json 对象的浏览器兼容
在向服务器请求返回 Json 时,像一些移动端低版本浏览器以及部分 IE 浏览器是无法识别 Json 对象的。
比如返回 Json 对象为:
{"body":{......},"returnCode":"010","returnMsg":"操作成功"}
var json = 返回的Json
在你使用 json 的属性时,如 json.body 时,就会报错:
无法获取未定义或 null 引用的属性 “body”
所以,在 Json 返回处添加兼容写法
if (typeof json == 'string') {
try {
json = JSON.parse(json)
} catch (e) {
console.log('response result parse error ' +e);
}
}