摘要:有兩個(gè)特殊的全局變量本文主要詳解三個(gè)參數(shù)對象,接收的值是對象包括除了之外的所有類型處理函數(shù)或者數(shù)組,處理函數(shù)是對每一個(gè)鍵值對都處理,數(shù)組是只過濾留下數(shù)組包含的鍵值,處理函數(shù)可以為代表縮進(jìn)字符,如果是最大不能超過,如果是字符串就是縮進(jìn)的字符串
JSONValue:ECMAScript有兩個(gè)特殊的全局變量:Math & JSON
本文主要詳解JSON
JSONNullLiteral
JSONBooleanLiteral
JSONObject
JSONArray
JSONString
JSONNumber
JSON.stringify(jsonvalue, replacerfnorarray, space)
三個(gè)參數(shù): 1. json對象,接收的值是json對象包括除了function之外的所有類型 2. 處理函數(shù)或者數(shù)組,處理函數(shù)是對每一個(gè)鍵值對都處理,數(shù)組是只過濾留下數(shù)組包含的鍵值,處理函數(shù)可以為null 3. space代表縮進(jìn)字符,如果是number最大不能超過10,如果是字符串就是縮進(jìn)的字符串 結(jié)果:json字符串 有replacer參數(shù)的話,返回過濾后的結(jié)果,否則返回原生的字符串 過程: 將json-->json字符串
JSON.parse()
接收的是json字符串,將其格式化為json對象 兩個(gè)參數(shù): 1. 加單引號的json字符串 2. 過濾函數(shù) 結(jié)果: 得到格式化的json對象例子: JSON.stringify:
鍵值對
array
number
string
boolean
null
function
可見,當(dāng)值是function時(shí)會返回undefined,這個(gè)有些情況下并不是我們期望的,那么怎么解決呢,要善于利用第二個(gè)參數(shù)即replacer為函數(shù)時(shí)(詳解見下面)
// 定義第二個(gè)參數(shù)為函數(shù),參數(shù)需要key&value function replace (key,value) { // 判斷value類型是否為function if(typeof value === "function"){ return Function.prototype.toString.call(value); } return value; } // 定義一個(gè)變量test,某一鍵值對的值為fn var test = {"first": 1, "getFirst": function(){console.log(this.first);}}; // 調(diào)用 JSON.stringify(test,replace); // 結(jié)果: // "{"first":1,"getFirst":"function (){console.log(this.first);}"}"
第二個(gè)參數(shù)除了可以是function之外還可以是數(shù)組[string,number類型的元素],相當(dāng)于一個(gè)IP白名單;
var test = {a:1,b:2,c:3}; JSON.stringify(test,["a"]); // "{"a":1}"
第二個(gè)參數(shù)還可以是null,或者不寫,會執(zhí)行JSON.stringify
var test = {a:1,b:2,c:3}; JSON.stringify(test,null); // "{a:1,b:2,c:3}" JSON.stringify(test); // "{a:1,b:2,c:3}"
第三個(gè)參數(shù)space
如果space參數(shù)為String類型的情況下,則默認(rèn)取String的前10個(gè)字符作為分割符
如果space參數(shù)為Number類型的情況下,則表示space個(gè)空格(space<=10,大于10取10)
//space參數(shù)為String的情況下: var test = {a:"1",b:2,c:3}; JSON.stringify(test,null,"test") /* { test"a": "1", test"b": 2, test"c": 3 } */ //space參數(shù)為Number的情況下: var test = {a:"1",b:2,c:3}; JSON.stringify(test,null,4) /* { "a": "1", "b": 2, "c": 3 }
三個(gè)參數(shù)共同控制,將多層嵌套的json對象轉(zhuǎn)換為格式化的美化的json string
// 定義第二個(gè)參數(shù)為函數(shù),參數(shù)需要key&value function replace (key,value) { // 判斷value類型是否為function if(typeof value === "function"){ return Function.prototype.toString.call(value); } return value; } // 定義一個(gè)變量test,某一鍵值對的值為fn var test = {"first": 1, "getFirst": function(){console.log(this.first);}}; // 調(diào)用 JSON.stringify(test,replace,4); // 結(jié)果: /* "{ "first": 1, "getFirst": "function (){console.log(this.first);}" }" */JSON.parse:
兩個(gè)參數(shù),1json字符串,2replacer function
應(yīng)用:數(shù)組去重最妙的方法
function replacer(key, value) { if(typeof value === "function"){ return Function.prototype.toString.call(value); } return value; } function unique(arr) { var hash = {}, re = []; for (var i = 0, length = arr.length; i < length; i++){ if(!hash[JSON.stringify(arr[i],replacer)]){ re.push(arr[i]); hash[JSON.stringify(arr[i])] = true; } } return re; } unique([function a (){console.log("function")}]); console.log(unique([1,"1", 1])); console.log(unique([1,1,5,6,5,78,5,3])); console.log(unique([1,"1",false,"false",[1,2,3],[1,2],{a:1},{a:1},{b:1}])); console.log(JSON.stringify(false)); console.log(JSON.stringify("false"));
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/88740.html
摘要:題目使用能得到哪些類型和的選擇中有哪些內(nèi)置函數(shù)變量按存儲方式分為哪些類型,并描述其特點(diǎn)如何理解知識點(diǎn)值類型和引用類型值類型引用類型對象,數(shù)組,函數(shù)值類型直接把值存儲在堆中,把賦值給在內(nèi)存中是又給開辟了一塊新的空間,存儲了同樣的值。 1.題目 1.JS使用typeof能得到哪些類型 === 和 == 的選擇 JS中有哪些內(nèi)置函數(shù) JS變量按存儲方式分為哪些類型,并描述其特點(diǎn) 如何理解J...
摘要:插件開發(fā)前端掘金作者原文地址譯者插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡單的方式。提供了與使用掌控異步前端掘金教你使用在行代碼內(nèi)優(yōu)雅的實(shí)現(xiàn)文件分片斷點(diǎn)續(xù)傳。 Vue.js 插件開發(fā) - 前端 - 掘金作者:Joshua Bemenderfer原文地址: creating-custom-plugins譯者:jeneser Vue.js插件是為應(yīng)用添加全局功能的一種強(qiáng)大而且簡單的方式。插....
摘要:雖然構(gòu)造函數(shù)或者對象字面量的方法都可以用來創(chuàng)建對象,但是這些方法使用同一個(gè)接口創(chuàng)建很多對象,會產(chǎn)生大量的重復(fù)代碼。參考資料冴羽的專題系列中高級前端面試手寫代碼無敵秘籍前端筆試之手寫代碼一本系列會從面試的角度出發(fā)圍繞JavaScript,Node.js(npm包)以及框架三個(gè)方面來對常見的模擬實(shí)現(xiàn)進(jìn)行總結(jié),具體源代碼放在github項(xiàng)目上,長期更新和維護(hù) showImg(https://use...
摘要:今天這篇文章我們來看看一道必會面試題,即如何實(shí)現(xiàn)一個(gè)深拷貝。木易楊注意這里使用上面測試用例測試一下一個(gè)簡單的深拷貝就完成了,但是這個(gè)實(shí)現(xiàn)還存在很多問題。 引言 上篇文章詳細(xì)介紹了淺拷貝 Object.assign,并對其進(jìn)行了模擬實(shí)現(xiàn),在實(shí)現(xiàn)的過程中,介紹了很多基礎(chǔ)知識。今天這篇文章我們來看看一道必會面試題,即如何實(shí)現(xiàn)一個(gè)深拷貝。本文會詳細(xì)介紹對象、數(shù)組、循環(huán)引用、引用丟失、Symbo...
摘要:當(dāng)解釋器尋找引用值時(shí),會首先檢索其在棧中的地址,取得地址后從堆中獲得實(shí)體如何實(shí)現(xiàn)繼承構(gòu)造繼承原型繼承實(shí)例繼承拷貝繼承原型機(jī)制或和方法去實(shí)現(xiàn)較簡單,建議使用構(gòu)造函數(shù)與原型混合方式。它是基于的一個(gè)子集。 JavaScript介紹js的基本數(shù)據(jù)類型。Undefined、Null、Boolean、Number、Stri...
閱讀 3987·2021-09-22 16:03
閱讀 5338·2021-09-22 15:40
閱讀 1196·2021-09-06 15:02
閱讀 875·2019-08-30 15:53
閱讀 2228·2019-08-29 15:35
閱讀 1113·2019-08-23 18:22
閱讀 3343·2019-08-23 16:06
閱讀 650·2019-08-23 12:27