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