亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS中Eval解析JSON字符串的一個小問題

2019-11-20 10:33:36
字體:
來源:轉載
供稿:網友

之前寫過一篇 關于 JSON 的介紹文章,里面談到了 JSON 的解析。我們都知道,高級瀏覽器可以用 JSON.parse() API 將一個 JSON 字符串解析成 JSON 數據,稍微欠妥點的做法,我們可以用eval() 函數。

JSON (JavaScript Object Notation)一種簡單的數據格式,比xml更輕巧。 JSON 是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON 數據不需要任何特殊的 API 或工具包。

JSON的規則很簡單: 對象是一個無序的“‘名稱/值'對”集合。一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”后跟一個“:”(冒號);“‘名稱/值' 對”之間使用“,”(逗號)分隔

var str = '{"name": "hanzichi", "age": 10}';var obj = eval('(' + str + ')');console.log(obj); // Object {name: "hanzichi", age: 10}

是否注意到,向 eval() 傳參時,str 變量外裹了一層小括號?為什么要這樣做?

我們先來看看 eval 函數的定義以及使用。

eval() 的參數是一個字符串。如果字符串表示了一個表達式,eval() 會對表達式求值。如果參數表示了一個或多個 JavaScript 聲明, 那么 eval() 會執行聲明。不要調用 eval() 來為算數表達式求值; JavaScript 會自動為算數表達式求值。

簡單地說,eval 函數的參數是一個字符串,如果把字符串 "noString" 化處理,那么得到的將是正常的可以運行的 JavaScript 語句。

怎么說?舉個栗子,如下代碼:

var str = "alert('hello world')";eval(str);

執行后彈出 "hello world"。我們把 str 變量 "noString" 化,粗暴點的做法就是去掉外面的引號,內部調整(轉義等),然后就變成了:

alert('hello world')

very good!這是正常的可以運行的 JavaScript 語句!運行之!

再回到開始的問題,為什么 JSON 字符串要裹上小括號。如果不加,是這個樣子的:

var str = '{"name": "hanzichi", "age": 10}';var obj = eval(str); // Uncaught SyntaxError: Unexpected token :

恩,報錯了。為什么會報錯?試試把 str "noString" 化,執行一下:

{"name": "hanzichi", "age": 10}; // Uncaught SyntaxError: Unexpected token :

毫無疑問,一個 JSON 對象或者說是一個對象根本就不是能執行的 JavaScript 語句!等等,試試以下代碼:

var str = '{name: "hanzichi"}';var obj = eval(str);console.log(obj); // hanzichi

這又是什么鬼?但是給 name 加上 "" 又報錯?

var str = '{"name": "hanzichi"}';var obj = eval(str); // Uncaught SyntaxError: Unexpected token :console.log(obj); 

好吧,快暈了,其實還是可以將 str "nostring" 化,看看是不是能正確執行的 JavaScript 語句。前者的結果是:

{name: "hanzichi"}

這確實是一條合法的 JavaScript 語句。{} 我們不僅能在 if、for 語句等場景使用,甚至可以在任何時候,因為 ES6 之前 JavaScript 只有塊級作用域,所以對于作用域什么的并不會有什么沖突。去掉 {} 后 name: "hanzichi" 也是合法的語句,一個 label 語句,label 語句在跳出嵌套的循環中非常好用,具體可以參考 label,而作為 label 語句的標記,name 是不能帶引號的,標記能放在 JavaScript 代碼的任何位置,用不到也沒關系。

一旦一個對象有了兩個 key,比如 {name: "hanzichi", age: 10},ok,兩個 label 語句?將 "hanzhichi" 以及 10 分別看做是語句,但是 語句之間只能用封號連接?。ū磉_式之間才能用逗號)。所以改成下面這樣也是沒有問題的:

var str = '{name: "hanzichi"; age: 10}';var obj = eval(str); console.log(obj); // 10

越扯越遠,文章開頭代碼的錯誤的原因是找到了,為什么套個括號就能解決呢?簡單來說,() 會把語句轉換成表達式,稱為語句表達式。括號里的代碼都會被轉換為表達式求值并且返回,對象字面量必須作為表達式而存在。

本文并不會大談表達式,關于表達式,可以參考文末鏈接。值得記住的一點是,表達式永遠有一個返回值。大部分表達式會包裹在() 內,小括號內不能為空,如果有多個表達式,用逗號隔開,也就是所謂的逗號表達式,會返回最后一個的值。

以上所述是小編給大家介紹了JS中Eval解析JSON字符串的一個小問題,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品免费看| 亚洲аv电影天堂网| 日韩中文字幕精品| 日韩精品亚洲视频| 国内精品一区二区三区四区| 欧美人在线视频| 成人观看高清在线观看免费| 久久在线免费视频| 在线观看久久av| 国产欧美精品在线| 2025国产精品视频| 这里只有精品视频在线| 欧美人在线视频| 在线观看日韩av| 国产这里只有精品| 欧美性猛交xxxx免费看| 91色精品视频在线| 亚洲天天在线日亚洲洲精| 国产精品亚洲综合天堂夜夜| 国产精品v日韩精品| 欧美另类在线观看| 精品国产依人香蕉在线精品| 91久久精品国产91性色| 中文字幕久精品免费视频| 国产成人小视频在线观看| 久久久久久久97| 在线看国产精品| 国产亚洲精品久久久优势| 亚洲欧美日韩天堂| 国产欧美亚洲精品| 亚洲精品网站在线播放gif| 国产精品va在线播放我和闺蜜| 亚洲最大的av网站| 亚洲精品短视频| 国产精品天天狠天天看| 亚洲精品国产美女| 精品久久久久久久久久久久久久| 精品国产依人香蕉在线精品| 黑人精品xxx一区| 日韩欧美在线视频观看| 欧美超级免费视 在线| 国产精品91一区| 日韩在线国产精品| 亚洲精品国产精品久久清纯直播| 日韩欧美成人区| 国产一区二区三区视频在线观看| 午夜免费在线观看精品视频| 亚洲bt天天射| 91精品视频专区| 91免费精品视频| 亚洲精品视频网上网址在线观看| 欧美国产乱视频| 日韩专区中文字幕| 国产欧美一区二区三区久久| 亚洲欧美精品伊人久久| 色哟哟网站入口亚洲精品| 国产亚洲日本欧美韩国| 欧美亚洲日本黄色| 久久久极品av| 欧美xxxx14xxxxx性爽| 亚洲xxxx视频| 蜜月aⅴ免费一区二区三区| 国产精品亚洲视频在线观看| 久久亚洲影音av资源网| 久久中文精品视频| 狠狠躁夜夜躁人人躁婷婷91| 国产成+人+综合+亚洲欧洲| 日韩精品视频免费专区在线播放| 国产丝袜一区视频在线观看| 97人人爽人人喊人人模波多| 亚洲国产高潮在线观看| 国产精品 欧美在线| 国产精品视频最多的网站| 精品视频在线观看日韩| 国产午夜精品全部视频在线播放| 亚洲一级片在线看| 欧美成人精品影院| 久久精品中文字幕电影| 91成人免费观看网站| 国产精品久久久久免费a∨大胸| 欧美大片大片在线播放| 欧美黄色免费网站| 国产在线98福利播放视频| 日韩有码在线视频| 中文字幕亚洲欧美日韩高清| 夜夜嗨av一区二区三区四区| 欧美一区视频在线| 亚洲aa在线观看| 亚洲精品国精品久久99热| 久久精视频免费在线久久完整在线看| 国产亚洲精品日韩| 日本成人精品在线| 国产一区二区免费| 国产午夜精品全部视频在线播放| 成人欧美在线视频| 亚洲国产精品视频在线观看| 久久精品成人欧美大片古装| 日韩色av导航| 亚洲高清在线观看| 国产精品久久久| 91丝袜美腿美女视频网站| 中文字幕免费精品一区高清| 久久69精品久久久久久久电影好| 国产精品一区专区欧美日韩| 欧美视频在线观看 亚洲欧| 国产综合福利在线| 久久久久久97| 中文字幕精品久久| 欧美性xxxxx极品娇小| 成人精品aaaa网站| 欧洲成人免费视频| 欧美国产日韩一区二区三区| 91国产高清在线| 亚洲高清一区二| 欧美国产日韩xxxxx| 一区二区三欧美| 2025国产精品视频| 国产一区二区三区高清在线观看| 亚洲国产第一页| 国产精品无av码在线观看| 91在线视频导航| 欧美日本在线视频中文字字幕| 精品成人av一区| 中文字幕亚洲色图| 国产一区深夜福利| 久久久久久久影院| 一区二区三区久久精品| 亚洲欧美日韩高清| 成人免费观看49www在线观看| 国产精品女人久久久久久| 亚洲精品成人久久久| 亚洲精品98久久久久久中文字幕| 久久久久久久久国产| 久久久久国产精品免费网站| 国产精品91在线| 欧美日韩午夜视频在线观看| 欧美日韩亚洲系列| 国内精品一区二区三区四区| 国模吧一区二区| 亚洲国产成人精品电影| 久久精品91久久久久久再现| 中日韩午夜理伦电影免费| 91sao在线观看国产| 亚洲乱码国产乱码精品精天堂| 日韩女在线观看| 另类图片亚洲另类| 国产97在线|亚洲| 国产成人在线一区二区| 日本精品视频在线| 亚洲成人1234| 日韩av黄色在线观看| 日韩免费观看在线观看| 91福利视频网| 欧美性生交大片免费| 国产精品自在线| 亚洲精品91美女久久久久久久| 国产亚洲人成a一在线v站| 91精品中国老女人| 亚洲国产精品中文| 91亚洲精华国产精华| 欧美午夜视频在线观看| 国产女同一区二区| 色婷婷成人综合| 欧美国产日韩精品|