新聞中心
JSON.stringify()是JavaScript開發(fā)人員最常用來調(diào)試的函數(shù)。但為什么用它呢,難道console.log()不能用來做同樣的事情嗎?不妨試試看。

從策劃到設(shè)計(jì)制作,每一步都追求做到細(xì)膩,制作可持續(xù)發(fā)展的企業(yè)網(wǎng)站。為客戶提供網(wǎng)站制作、成都網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)頁設(shè)計(jì)、域名注冊、網(wǎng)絡(luò)空間、網(wǎng)絡(luò)營銷、VI設(shè)計(jì)、 網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,以客戶的口碑塑造優(yōu)易品牌,攜手廣大客戶,共同發(fā)展進(jìn)步。
- //Initialize a User object
- const user = {
- “name” : “Prateek Singh”,
- “age” : 26
- }console.log(user);RESULT
- // [object Object]
看!console.log()沒有輸出我們想要的結(jié)果。它輸出了[object Object],因?yàn)閺膶ο蟮阶址哪J(rèn)轉(zhuǎn)換是“[objectObject]”。因此,我們使用JSON.stringify()先將對象轉(zhuǎn)換為字符串,然后把結(jié)果輸入console控制臺,如下所示。
- const user = {
- “name” : “Prateek Singh”,
- “age” : 26
- }console.log(JSON.stringify(user));RESULT
- // "{ "name" : "Prateek Singh", "age" :26 }"
通常,開發(fā)人員使用這個(gè)stringify函數(shù)的方式很簡單,像上面那樣操作就可以。但是接下來所展示的它隱藏的秘密,可以讓你的生活變得輕松。
1:第二個(gè)參數(shù)(數(shù)組)
是的,stringify 函數(shù)也可以有第二個(gè)參數(shù)。它是你在控制臺中輸入對象的鍵數(shù)組??雌饋砗唵伟?接下來仔細(xì)看看。我們有一個(gè)“產(chǎn)品”對象,并且想知道產(chǎn)品的名稱。當(dāng)我們輸入:
- console.log(JSON.stringify(product));
它會(huì)給出以下結(jié)果。
- {“id”:”0001",”type”:”donut”,”name”:”Cake”,”ppu”:0.55,”batters”:{“batter”:[{“id”:”1001",”type”:”Regular”},{“id”:”1002",”type”:”Chocolate”},{“id”:”1003",”type”:”Blueberry”},{“id”:”1004",”type”:”Devil’sFood”}]},”topping”:[{“id”:”5001",”type”:”None”},{“id”:”5002",”type”:”Glazed”},{“id”:”5005",”type”:”Sugar”},{“id”:”5007",”type”:”PowderedSugar”},{“id”:”5006",”type”:”Chocolate withSprinkles”},{“id”:”5003",”type”:”Chocolate”},{“id”:”5004",”type”:”Maple”}]}
在記錄里很難找到名稱鍵,因?yàn)樵诳刂婆_顯示了很多無用的信息。當(dāng)對象變大時(shí),困難也隨之增加。
stringify函數(shù)的第二個(gè)參數(shù)派上用場。不妨重寫代碼,看看結(jié)果如何。
- console.log(JSON.stringify(product,[‘name’]);//RESULT
- {"name" : "Cake"}
問題解決了,與輸出整個(gè)JSON對象不同,我們可以只輸出所需的鍵,通過在第二個(gè)參數(shù)中將其作為數(shù)組來傳遞。
2:第二個(gè)參數(shù)(函數(shù))
也可以將第二個(gè)參數(shù)作為函數(shù)來傳遞。它根據(jù)函數(shù)中寫入的邏輯計(jì)算每個(gè)鍵值對。如果返回未定義(undefined)的鍵值對就不會(huì)輸出。想要更好地理解,可以參考下面這個(gè)例子。
- const user = {
- “name” : “Prateek Singh”,
- “age” : 26
- }
- Passing function as 2nd argument
- // Result
- { "age" : 26 }
只有age被輸出,typeOf字符串的值會(huì)因?yàn)楣δ軛l件返回undefined。
3:第三個(gè)參數(shù)是數(shù)字
第三個(gè)參數(shù)控制最終字符串里的間距。如果參數(shù)是一個(gè)數(shù)字,則字符串化中的每個(gè)級別,都將縮進(jìn)這個(gè)空格字符數(shù)。
- Note: '--' represnts the spacingfor understanding purposeJSON.stringify(user, null, 2);
- //{
- //--"name": "Prateek Singh",
- //--"age": 26,
- //--"country": "India"
- //}
4:第三個(gè)參數(shù)是字符串
如果第三個(gè)參數(shù)是字符串,則用它來代替上面顯示的空格字符。
- JSON.stringify(user, null,'**');
- //{
- //**"name": "Prateek Singh",
- //**"age": 26,
- //**"country": "India"
- //}
- Here * replace the space character.
這里*替代空格字符。
5:toJSON函數(shù)
我們有一個(gè)名為toJSON的類函數(shù),它的屬性是可以作為任何對象的一部分。JSON.stringify返回這個(gè)函數(shù)的結(jié)果并對其進(jìn)行字符串化,而不是將全部對象轉(zhuǎn)換為字符串??纯聪旅娴睦?。
- const user = {
- firstName : "Prateek",
- lastName : "Singh",
- age : 26,
- toJSON() {
- return {
- fullName: `${this.firstName} +${this.lastName}`
- };}console.log(JSON.stringify(user));RESULT
- // "{ "fullName" : "Prateek Singh"}"
可以看到,它不是輸出全部對象,而是只有toJSON函數(shù)的結(jié)果。
希望你能從stringify()身上學(xué)到知識。
網(wǎng)站標(biāo)題:JSON.stringify()的5個(gè)秘密特性
當(dāng)前鏈接:http://m.fisionsoft.com.cn/article/codshgd.html


咨詢
建站咨詢
