JSON 和 JavaScript eval使用說明

來源:互聯網
上載者:User

JSON 格式可以使對象(object)、數組(array)、值(value)、字串(string)、數值(number)。 複製代碼 代碼如下:<script type="text/javascript">
var user = {
"Name":"Andy",
"Sex" :"man",
"Age" :"20",
"Phone":{"mobilephone":"123456789","telephone":"1234-12345678"},
"baby":[{"big":"xiaohong"},{"middle":"xiaoming"},{"small":"xiaoli"}] //包含數組
}
alert(user.Name);
alert(user.Phone.mobilephone);
alert(user.baby[0].big);
user.baby[0].big = "--";//修改了 JSON 值
alert(user.baby[0].big);
</script>

參考:http://www.json.org/json-zh.html

  下面來看看 JavaScript 的 eval 函數。
  eval 函數會評估給定的一個JavaScript代碼的字串,並試圖去執行包含在字串裡的運算式或者一系列的合法的 JavaScript 語句。eval 函數將把最後一個運算式或者語句包含的值或引用作為傳回值。

代碼 複製代碼 代碼如下:<script type="text/javascript">
var bar = "bar";
var foobar = eval('"foo"+bar');
alert(bar + foobar);//執行語句
foobar = eval('if(bar = "bar"){bar = "foo-bar";}else{bar = "bar-foo";}');
alert(foobar);//返回語句中包含的值
</script>

  JSON 和 對象字面量(Object Literals)的區別:JSON 的名字部分嚴格用引號+名字來表示。
代碼 複製代碼 代碼如下:<script type="text/javascript">
//對象字面量
var objectLiteral = {
name:"Objector.L",
age:"24",
special:"JavaScript",
sayName:function(){
return this.name;
}
};
//JSON 對象
var jsonFormat = {
"summary":"Blogs",
"blogrolls":[
{
"title":"Explore JavaScript",
"link":"http://example.com"
},
{
"title":"Explore JavaScript",
"link":"http://example.com"
}
]
};
</script>

  由於 Ajax 的興起, JSON 這種輕量級的資料格式作為用戶端與伺服器端之間傳輸的格式逐漸流行起來,進而出現的問題是如何將伺服器端構建好的 JSON 資料轉換為可用的 JavaScript 對象,利用 eval 函數無疑是一種簡單而直接的方法。在轉化的時候需要將 JSON 字串的外麵包裝一層園括弧:

var jsonObject = eval("("+ jsonFormat +")")

  加園括弧的目的是迫使 eval 函數在評估 JavaScript 代碼的時候強制將括弧內的運算式(expression)轉換為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不佳加外層的括弧,那麼eval會將大括弧之別為JavaScript代碼塊的開始結束標記機,那麼{}將被認為是執行了一句空語句。所以下面兩個執行結果是不同的:

複製代碼 代碼如下:alert(eval("{}")); //return undefined
alert(eval("({})")); //return [object Object]

  JSON 格式的名字部分為什麼要加引號?因為eval函數會將{foo:"bar"}解釋成合法的JavaScript 語句,而非運算式。但人們往往是想讓eval將這段代碼解釋成一個對象。所以JSON 格式會強制你去在名字的外側加上引號,再結合圓括弧,eval就不會錯誤的將JSON解釋成代碼塊。
   複製代碼 代碼如下://eval 錯誤解析語義
alert(eval('{foo:"bar"}')); //return "bar",incorrect
//eval 正確解析JSON
alert(eval('({"foo":"bar"})'));//return JSON object,correct

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.