js抽象值操作

ToString

基本類型值的字符串化規則為:null 轉換為 "null",undefined 轉換為 "undefined",true 轉換為 "true"。數字的字符串化則遵循通用規則,極小和極大的 數字使用指數形式:

// 1.07 連續乘以七個 1000 var a = 1.07 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000; // 七個1000一共21位數字

a.toString(); // "1.07e21"

對普通對象來說,除非自行定義,否則 toString()(Object.prototype.toString())返回 內部屬性 [[Class]] 的值

然而前面我們介紹過,如果對象有自己的 toString() 方法,字符串化時就會調用該方法並 使用其返回值。

數組的默認 toString() 方法經過了重新定義,將所有單元字符串化以後再用 "," 連接起 來:

var a = [1,2,3];

a.toString(); // "1,2,3"

toString() 可以被顯式調用,或者在需要字符串化時自動調用

JSON 字符串化

工具函數 JSON.stringify(..) 在將 JSON 對象序列化為字符串時也用到了 ToString。

請注意,JSON 字符串化並非嚴格意義上的強制類型轉換,因為其中也涉及 ToString 的相 關規則,所以這裡順帶介紹一下。

對大多數簡單值來說,JSON 字符串化和 toString() 的效果基本相同,只不過序列化的結 果總是字符串:

JSON.stringify( 42 ); // "42"

JSON.stringify( "42" ); // ""42"" (含有雙引號的字符串)

JSON.stringify( null ); // "null"

JSON.stringify( true ); // "true"

所有安全的 JSON 值(JSON-safe)都可以使用 JSON.stringify(..) 字符串化。安全的 JSON 值是指能夠呈現為有效 JSON 格式的值。

為了簡單起見,我們來看看什麼是不安全的 JSON 值。undefined、function、symbol (ES6+)和包含循環引用(對象之間相互引用,形成一個無限循環)的對象都不符合 JSON 結構標準,支持 JSON 的語言無法處理它們。

JSON.stringify(..) 在對象中遇到 undefined、function 和 symbol 時會自動將其忽略,在 數組中則會返回 null

例如:

js抽象值操作


分享到:


相關文章: