今天跟大家分享我前兩天遇見的一個BUG,說出來很難受,因為這個BUG花了我一個多小時去找原因,後來莫名其妙的故障消失了,強迫症犯了的我,居然花了2個多小時去故意再製造這個BUG,只想弄明白WHY?結果大家應該都猜到了,哈哈,沒找到!沒錯,居然沒找到!不過類似於Uncaught SyntaxError ...
今天跟大家分享我前兩天遇見的一個BUG,說出來很難受,因為這個BUG花了我一個多小時去找原因,後來莫名其妙的故障消失了,強迫症犯了的我,居然花了2個多小時去故意再製造這個BUG,只想弄明白WHY?結果大家應該都猜到了,哈哈,沒找到!沒錯,居然沒找到!不過類似於Uncaught SyntaxError: Unexpected token ' in JSON at position 2的錯誤。
關於JOSN的方法,大家通過百度應該都深刻理解它的用法:parse用於從一個字元串中解析出json對象;stringify()用於從一個對象解析出字元串。
前兩天我在做一個本地存儲的時候,通過localStorage封裝一個函數的時候,將對象通過JOSN.stringify()存儲在本地,跳轉頁面,再通過JOSN.parse()
將json字元串轉化為對象時,BUG出現了!!!部分代碼如下:
備註:轉化為JSON字元串的存儲
備註:JSON字元串轉化對象
後來花了一個多小時找不到問題所在,chrome一直報錯:Uncaught SyntaxError: Unexpected token o in JSON at position 1;終於忍不了了,打開度娘,直接把問題複製黏貼,真是什麼樣的解決方法都有,頓時。。。
記得打開的第一個解決方案,是國外的程式員一個小伙子,說了半天,我算明白,他意思說可能JOSN.parse()括弧里的內容可能已經是一個對象了,沒有再轉換的必要了,可我打開我的localStorage明明還是字元串啊(原BUG圖已經找不到,如圖),死馬當活馬醫,我還是試了一試,絕望!
後來試了試網上另一種方法,相信大家也看過,但是有些並沒有解決問題!!!不過思路是對的,如圖:
備註:JOSN方法對符號的嚴格定義
備註:報錯原因是聲明str1時用了單引號
但是大家能發現的是,其實它的報錯是position 2,而並不是我的1;因為它定義的str裡面是用單引號引起來的,這倒是提醒了我,JSON將對象轉化為字元串存儲在本地是有嚴格要求的,比如說是符號,或是非法字元串之類的,都可能影響後面JOSN.parse的解析。。。
此刻已經壓抑不住自己蠢蠢欲動的心了,我的本地存儲中如果存在非法的字元一定也會引起報錯,所以我直接localStorage.clear();清除了之前的本地存儲。。。哈哈,果然問題解決,沒有再報錯。。。沒開心一會突然忘了重要的一件事,BUG沒有記錄!!!(作為一名合格的程式員,要有良好的記錄BUG的習慣。)所以才有了後來兩個小時的找”BUG“。。。好了,謝謝你這麼帥,還能看完我的分享。。。送你一朵❀