2017-09-28 97 views
1

我將null傳遞給JSON.parse()並且儘管第一個參數被記錄爲說明它應該是字符串值,但它仍可用於提供nullJSON.parse允許爲空作爲值

即使文檔聲明爲字符串,並且這可以在多個瀏覽器中安全可靠地使用,它怎麼會不會拋出錯誤?

+0

檢查下面的答案 https://stackoverflow.com/questions/21120999/representing-null-in-json –

+0

我覺得這個問題是不同的,因爲它談論在JSON對象內使用'null'。 JSON.stringify已經結束了字符串的JSON對象。我直接向我的'JSON.parse()'中直接拋出'null'。 –

+0

我假設'parse'可能會在內部將給定值轉換爲一個字符串,該字符串將是'「null」'',這是一個有效的JSON值。 – deceze

回答

1

ECMAScript spec說爲JSON.parse第一步:

  1. JTextToString(text)

這意味着它會投下什麼說法它給一個字符串,null強制轉換爲"null",這是null有效的JSON表示。

請注意,單個這樣的JSON基元應該不是有效,JSON字符串應該包裝在對象或數組中。但解析器傳統上一直不嚴格,部分原因是它使我的實現更簡單。

+0

所以我猜這裏要做的最可靠的事情是檢查輸入值是一個字符串,然後將它交給'JSON.parse',因爲我濫用了它,否則呢? –

+1

「一個JSON字符串應該包裝在一個對象或數組中」 - 原始的JSON規範說,但不是很清楚。 [rfc7159](https://tools.ietf.org/html/rfc7159)將其更新爲:JSON文本是一個序列化的值。請注意,某些先前的JSON規範 將JSON文本約束爲對象或數組。 – Quentin

+0

@Quentin我認爲規範落後的案例? – deceze

-1

the specification

  1. 讓JText是的ToString(文本)。

它不要求第一個參數是一個字符串,它試圖將其轉換爲字符串。

"" + null會給你"null"這是一個包含有效JSON的字符串。

這是also in the spec

空:回到 「空」。