深入理解JavaScript系列(7)

2018-06-09 15:57 更新

本文是深入理解JavaScript系列的第篇讀文筆記,博客原文在這里

內(nèi)容簡要

鑒于JSON數(shù)據(jù)格式的越來越流行,但是JSON對象JSON字符串這兩種概念往往又會被人混淆。所以本篇文章就是對相關內(nèi)容的闡述。

BACKBONE

數(shù)據(jù)類型的分類

現(xiàn)在比較流行的網(wǎng)絡數(shù)據(jù)交換格式包括:JSON,YAML以及日薄西山的XML

從結(jié)構上看,所有的數(shù)據(jù)最后都可以分解成三個基本類型,

  1. 標量(scalar),也就是一個單獨的字符串(String)或者數(shù)字(Number)。比如”beijing”這個單獨的詞。
  2. 序列(sequence),也就是若干個相關的數(shù)據(jù)按照一定的順序組合在一起。又叫做數(shù)組(Array)或者列表(List)。比如”beijing,shanghai”。
  3. 映射(mapping),也就是一個鍵值對(key:value),即數(shù)據(jù)有一個名稱,還有一個與之對應的值。這個又稱作散列(Hash)或者字段(Dictionary)。比如”首都:北京”。

此部分內(nèi)容參考自數(shù)據(jù)類型和Json格式。

可見數(shù)據(jù)構成的最小單位是非常簡單的,而JSON正式完美的符合了這三種最基本的數(shù)據(jù)構成單元。

JavaScript中字面量的含義

在JavaScript中,我們經(jīng)常會聽到這樣一個詞,JSON字面量,對象字面量,字符串字面量等等,他們究竟是什么意思呢?

引用developer.mozilla.org中的說法,字面量就是

  1. 固定的值,讓你從“字面上”理解其含義。
  2. 字符串字面量是由雙引號("")或者單引號('')括起來的零個或多個字符。
  3. 對象字面量是由大括號({})括起來,擁有零個或多個鍵值對。

比如下面的代碼,

// 這些都是字面量
var a = 1;
var name = 'puck';
var puck = {
    name: 'puck',
    age: 20
};

JSON字符串和JSON對象

首先,JSON有非常嚴格的語法,如下,

{
    "key": "value"
}

其中,鍵和值都必須要用雙引號括起來,不用或者使用單引號都是不行滴。

從某種意義上說,JSON字符串終歸是字符串,也就是說JSON字符串是字符串的子集,不過JSON字符串滿足這樣的條件: JSON字符串可以被正確的反序列化成JSON對象。

而JSON對象與普通的JavaScript對象卻不是那么好區(qū)分,要看對象所在的上下文場景??聪旅娴拇a,

// JSON字符串
var puck = '{"name": "puck", "age": 20}';
// 字面量對象,這里我們可以簡單將其看成是一個JSON對象
var puck2 = {
    "name": "puck2",
    "age": 20
};

真正的JSON對象

從嚴格意義上來說,滿足JSON語法的普通JavaScript字面量對象并不是JSON對象。兩者是完全不一樣的概念。

在新版的瀏覽器里JSON對象已經(jīng)被原生的內(nèi)置對象了,目前有2個靜態(tài)方法:JSON.parse用來將JSON字符串反序列化成對象,JSON.stringify用來將對象序列化成JSON字符串。老版本的瀏覽器不支持這個對象,但你可以通過json2.js來實現(xiàn)同樣的功能。

總結(jié)

好吧,這篇其實算是一篇水文,講述的內(nèi)容比較簡單,算是一篇科普文吧。

這里只想強調(diào)一條,JSON是一種對數(shù)據(jù)結(jié)構的簡潔描述,然后還要知道現(xiàn)代瀏覽器中已經(jīng)有JSON.parseJSON.stringify這兩個方法就可以了。



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號