var testObject1 = { OrderAmount: 0.11 }; JSON.stringify(testObject1) => OrderAmount: null
var json2 = { type: function (obj) { if (obj == null) return String(obj); var h = { '[object Boolean]': 'boolean', '[object Number]': 'number', '[object String]': 'string', '[object Function]': 'function', '[object Array]': 'array', '[object Date]': 'date', '[object RegExp]': 'regexp', '[object Error]': 'error' }; var t = Object.prototype.toString.call(obj); if (t in h) return h[t]; if (t == '[object Object]') t = obj + ''; var arr = t.match(/^\[object (HTML\w+)\]$/); if (arr) return arr[1]; return 'object'; }, stringifyJSON: function (obj) { var str, t = window.JSON; var rstringifyJSON = /([\n\r\f\\\/\'\"])/g; var arr = [], i = 0, n, p; var stringHash = { '\n': '\\n', '\r': '\\r', '\f': '\\f' }; switch (json2.type(obj)) { case null: str = 'null'; break; case 'undefined': str = 'undefined'; break; case 'object': for (p in obj) { if (obj.hasOwnProperty(p)) { arr[i++] = json2.stringifyJSON(p) + ':' + json2.stringifyJSON(obj[p]); } } str = '{' + arr.join(',') + '}'; break; case 'array': for (i = 0, n = obj.length; i < n; i++) { arr[i] = json2.stringifyJSON(obj[i]); } str = '[' + arr.join(',') + ']'; break; case 'string': str = '\"' + obj.replace(rstringifyJSON, function (a) { return stringHash[a] || '\\' + a; }) + '\"'; break; case 'date': str = 'new Date(' + obj.getTime() + ')'; break; case 'number': case 'boolean': case 'function': case 'regexp': str = obj.toString(); break; default: str = 'null'; } return str; } }; JSON.stringify = json2.stringifyJSON;
固然,我这里其实挖掘的不够完全,我只是定位到了JSON.stringify有问题,却不能再定位里面哪一个环节有问题了......javascript
更加优雅的作法:html
var stringifyFunc = JSON.stringify JSON.stringify = function () { if (arguments.length == 1) { return stringifyFunc.call(this, arguments[0], function (k, v) { if (!isNaN(v)) return v + ''; else return v; }) } else { stringifyFunc.apply(this, arguments); } }
上面说到了localstorage,这里正好将它拿出来讲下,首先有几个必需要牢记的规则前端
① localstorage最大字符为500多万(5M)
各个手机有所差别,可是不会太大,因此使用localstorage必定要记得清理,不清理可能致使
读取localstorage效率降低,localstorage满了会引起业务逻辑错误
② localstorage读取文件的
因此其性能没有内存读取快,firefox更是会一次性将数据导入内存,想一想就以为吓人啊
③ localstorage不被爬虫识别,因此与SEO相关的关键信息须要避免使用localstorage,不然后续会被坑死
window.onunload = function () { };//不要问我为何,我也不知道!
最后在开启隐私模式下时,safari的localstorage读写是不可用的,可是qq浏览器却能够,至于缘由我就不知道了......java
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <meta name="viewport" content="width=320.1, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no,minimal-ui"> </head> <body> <a href="http://www.baidu.com">百度一下</a> <a href="taobao://wireless">测试无效URL</a> </body> </html>
1 <html xmlns="http://www.w3.org/1999/xhtml"> 2 <head> 3 <title></title> 4 <meta name="viewport" content="width=320.1, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no,minimal-ui"> 5 <script id="others_zepto_10rc1" type="text/javascript" class="library" src="/js/sandbox/other/zepto.min.js"></script> 6 </head> 7 <body> 8 <a href="http://www.baidu.com">百度一下</a> <a href="taobao://wireless">测试无效URL</a> 9 <script type="text/javascript"> 10 $('a').click(function (e) { 11 var el = $(e.target); 12 var url = el.attr('href'); 13 if (url.indexOf('taobao') != -1) { 14 var ifm = document.createElement('iframe'); 15 ifm.onload = function () { 16 ifm.contentWindow.document.write('<script>location.href="' + url + '"</' + '' + 'script>'); 17 } 18 ifm.src = 'about:blank'; 19 document.body.appendChild(ifm); 20 } else { 21 window.location = url; 22 } 23 e.preventDefault(); 24 }); 25 </script> 26 </body> 27 </html>
核心代码在此:android
1 $('a').click(function (e) { 2 var el = $(e.target); 3 var url = el.attr('href'); 4 if (url.indexOf('taobao') != -1) { 5 var ifm = document.createElement('iframe'); 6 ifm.onload = function () { 7 ifm.contentWindow.document.write('<script>location.href="' + url + '"</' + '' + 'script>'); 8 } 9 ifm.src = 'about:blank'; 10 document.body.appendChild(ifm); 11 } else { 12 window.location = url; 13 } 14 e.preventDefault();
其原理就是iframe中url解析错误的话,Safari不太理睬~~~~~~git
不少大型网站都会具备统计代码,而此类统计代码通常是以img作请求发出,可是他能够致使10px白屏你知道吗?github