JSON 格式的數(shù)據(jù)需要遵循什么規(guī)則?
由來
JSON 格式(JavaScript Object Notation 的縮寫)是一種用于數(shù)據(jù)交換的文本格式撮躁,2001年由 Douglas Crockford 提出把曼,目的是取代繁瑣笨重的 XML 格式嗤军。
規(guī)則
- 復合類型的值只能是數(shù)組或?qū)ο笮鹱荒苁呛瘮?shù)震叮、正則表達式對象、日期對象苇瓣。
- 簡單類型的值只有四種:字符串击罪、數(shù)值(必須以十進制表示)媳禁、布爾值和
null
(不能使用NaN
,Infinity
,-Infinity
和undefined
) - 字符串必須使用雙引號表示损话,不能使用單引號丧枪。
- 對象的鍵名必須放在雙引號里面拧烦。
- 數(shù)組或?qū)ο笞詈笠粋€成員的后面恋博,不能加逗號债沮。
使用 JSON 對象實現(xiàn)一個簡單的深拷貝函數(shù)(deepCopy)
這里使用JSON.stringify()
和JSON.parse()
來將對象轉(zhuǎn)換成字符串并且還原的方式來實現(xiàn)深拷貝
// 定義數(shù)組
var obj = {
name: 'NinthG',
age: 26,
friends: ['Game', 'Skin', 'Music']
}
// 使用JSON.stringify()和JSON.parse()方法
var "new obj" = JSON.parse(JSON.stringify(obj))
// 改變obj中的name
obj.name = '秦濤'
//測試深拷貝是否成功
console.log(obj)
console.log("new obj")
// 輸出結(jié)果
[object Object] {
age: 26,
friends: ["Game", "Skin", "Music"],
name: "秦濤"
}
[object Object] {
age: 26,
friends: ["Game", "Skin", "Music"],
name: "NinthG"
}
數(shù)組方法理解
-
push
疫衩、pop
闷煤、shift
鲤拿、unshift
近顷、join
、splice
分別是什么作用家淤?-
push
:在數(shù)組最后添加一個元素絮重, 返回值為添加元素后的數(shù)組長度青伤,改變當前數(shù)組 -
pop
:將數(shù)組的最后一個元素拿出來,返回值為拿出來的元素蚪腋,改變當前數(shù)組 -
shift
:將數(shù)組第一個元素拿出來屉凯,返回值為拿出元素悠砚,改變當前數(shù)組 -
unshift
:在數(shù)組第一位添加一個元素灌旧,返回值為添加元素后的數(shù)組長度枢泰,改變當前數(shù)組 -
join
:將數(shù)組中的值用方法內(nèi)的字符串拼接成新的字符串衡蚂,返回拼接的字符串讳窟,不改變當前數(shù)組 -
splice
:通常用作.splice(x, y,)
,表示從下標為x的位置開始丽啡,拿出來y個元素改执,改變當前數(shù)組
-
- 用
splice
函數(shù)分別實現(xiàn)push
辈挂、pop
终蒂、shift
拇泣、unshift
方法
var arr = [1,2,3,4,5]
- 實現(xiàn)
push
:
arr.splice(arr.length, 0, "a") //因為splice操作是從下標位置之前操作的霉翔,所以不用arr.length - 1
- 實現(xiàn)
pop
:
arr.splice(arr.length - 1, 1)
- 實現(xiàn)
shift
:
arr.splice(0, 1)
- 實現(xiàn)
unshift
:
arr.splice(0, 0, 1)
寫一個函數(shù),操作數(shù)組序芦,數(shù)組中的每一項變?yōu)樵瓉淼钠椒街ゼ樱谠瓟?shù)組上操作
var arr = [1, 2, 3] // 聲明數(shù)組
function squareArr(arr){
for (i = 0; i < arr.length; i++){
arr[i] = arr[i]*arr[i]
}
} // 聲明函數(shù)藏杖,并使用for循環(huán)蝌麸,將平方后的值賦值給當前位置元素
squareArr(arr) // 使用arr數(shù)組執(zhí)行函數(shù)
console.log(arr) //輸出結(jié)果
寫一個函數(shù),操作數(shù)組弟疆,返回一個新數(shù)組,新數(shù)組中只包含正數(shù)
選擇使用.filter方法作為判斷條件
因為蠢柑司,所以用了兩種方法攒驰,并沒有用到其他同學作業(yè)中的parseInt方法
// 方法1 定義新數(shù)組名字
var arr = [3, -1, 2, '秦濤', true]
function filterPositive(arr){
return arr.filter(
function(x){
return x > 0 && typeof x == "number"
}
)
}
var arr2 = filterPositive(arr)
console.log(arr2)
console.log(arr)
// 方法2 不定義隅津,直接console.log
var arr = [3, -1, 2, '秦濤', true]
console.log(
arr.filter(
function(x){
return x > 0 && typeof x == "number"
}))
console.log(arr)
parseInt方法并不會...