1沛鸵、JSON 格式的數(shù)據(jù)需要遵循什么規(guī)則
JSON 格式(JavaScript Object Notation 的縮寫)是一種用于數(shù)據(jù)交換的文本格式,2001年由 Douglas Crockford 提出曲掰,目的是取代繁瑣笨重的 XML 格式。
JSON格式基本規(guī)則
- 并列的數(shù)據(jù)之間用逗號(", ")分隔拾氓。
- 映射用冒號(": ")表示底哥。
- 并列數(shù)據(jù)的集合(數(shù)組)用方括號("[]")表示房官。
- 映射的集合(對象)用大括號("{}")表示。
另外JSON 對值的類型和格式有嚴(yán)格的規(guī)定
- 復(fù)合類型的值只能是數(shù)組或?qū)ο蠓跄蹋荒苁呛瘮?shù)蜡峰、正則表達式對象、日期對象载绿。
- 簡單類型的值只有四種:字符串油航、數(shù)值(必須以十進制表示)、布爾值和null(不能使用NaN, Infinity, -Infinity和undefined)怕享。
- 字符串必須使用雙引號表示镰踏,不能使用單引號。
- 對象的鍵名必須放在雙引號里面跌帐。
- 數(shù)組或?qū)ο笞詈笠粋€成員的后面,不能加逗號含末。
以下是合格的JSON格式
["one", "two", "three"]
{ "one": 1, "two": 2, "three": 3 }
{"names": ["張三", "李四"] }
[ { "name": "張三"}, {"name": "李四"} ]
{}
[]
null
以下是不合格的寫法
{ name: "張三", 'age': 32 } // 屬性名必須使用雙引號
[32, 64, 128, 0xFFF] // 不能使用十六進制值
["one","two","three",] //最后邊不要加逗號
{ "name": "張三", "age": undefined } // 不能使用undefined
{ "name": "張三", "age": null, } // 最后邊不要加逗號
{ "name": "張三",
"birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
"getName": function() {
return this.name;
}
} // 不能使用函數(shù)和日期對象
2佣盒、使用 JSON 對象實現(xiàn)一個簡單的深拷貝函數(shù)(deepCopy)
思路:用JSON.stringify方法用于將一個值轉(zhuǎn)為字符串。該字符串符合 JSON 格式盯仪,并且可以被JSON.parse方法還原蜜葱。使用JSON.parse方法將JSON字符串轉(zhuǎn)化成對象。
var oldObj={
name:{
firstName:'Jim',
lastName:'King'
},
age:'24'
}
function clone(obj){
var newObj;
newObj=JSON.parse(JSON.stringify(obj));
return newObj;
}
var cloneObj=clone(oldObj)
console.log(cloneObj)
/*
[object Object] {
age: "24",
name: [object Object] {
firstName: "Jim",
lastName: "King"
}
}
*/
cloneObj.name.firstName='Tom'
cloneObj.age='18'
console.log(cloneObj.name.firstName+cloneObj.age) //"Tom18"
console.log(oldObj.name.firstName+oldObj.age) //"Jim24
注意:JSON.stringify方法會忽略對象的不可遍歷屬性爸黄,如函數(shù)揭鳞、正則表達式對象、日期對象等称开。所以這種深拷貝方法有局限性乓梨。
3、數(shù)組方法里push蕴侣、pop狈惫、shift、unshift胧谈、join菱肖、splice分別是什么作用?用 splice函數(shù)分別實現(xiàn)push稳强、pop和悦、shift渠缕、unshift方法
- 數(shù)組方法歸納:
方法 | 用法 | 說明 |
---|---|---|
push | Array.push(str) | 在數(shù)組最后添加一個或多個元素 |
pop | Array.pop() | 把數(shù)組最后一位彈出來亦鳞,返回 |
unshift | Array.unshift(str) | 在數(shù)組最前邊添加一個或多個元素 |
shift | Array.shift() | 把數(shù)組第一位拿出來返回,數(shù)組發(fā)生變化 |
join | Array.join(separator) | 作用是將數(shù)組各個元素是通過指定的分隔符進行連接成為一個字符串并返回遭笋。其作用和toString()相同 |
slice | Array.slice(start,end) | 該方法可從已有的數(shù)組中返回選定的元素徒探,原數(shù)組不變 |
concat | concat(array) | 用于拼接數(shù)組,a.concat(b)返回一個a和b共同組成的新數(shù)組央串,不會修改任何一個原始數(shù)組偷溺,也不會遞歸連接數(shù)組內(nèi)部數(shù)組 |
reverse | Array.reverse() | 方法用于將數(shù)組逆序,它會修改原數(shù)組 |
splice | Array.splice(index, howmany, element1,.....,elementX) | 用于一次性解決數(shù)組添加、刪除(這兩種方法一結(jié)合就可以達到替換效果)秩命,方法有三個參數(shù) |
sort | Array.sort() Array.sort(parameter) | sort方法用于對數(shù)組進行排序,當(dāng)沒有參數(shù)的時候會按字母表升序排序袄友,如果含有undefined會被排到最后面霹菊,對象元素則會調(diào)用其toString方法 |
- 用 splice函數(shù)實現(xiàn)push方法
var arr1=[3,4,5]
arr1.push('hello')
console.log(arr1) //[3, 4, 5, "hello"]
var arr2=[3,4,5]
arr2.splice(3,0,'hello')
console.log(arr2) //[3, 4, 5, "hello"]
- 用 splice函數(shù)實現(xiàn)pop方法
var arr1=[3,4,5]
arr1.pop()
console.log(arr1) //[3, 4]
var arr2=[3,4,5]
arr2.splice(2,1)
console.log(arr2) //[3, 4]
- 用 splice函數(shù)實現(xiàn)shift方法
var arr1=[3,4,5]
arr1.shift()
console.log(arr1) //[4, 5]
var arr2=[3,4,5]
arr2.splice(0,1)
console.log(arr2) //[4, 5]
- 用 splice函數(shù)實現(xiàn)unshift方法
var arr1=[3,4,5]
arr1.unshift('hello')
console.log(arr1) //["hello", 3, 4, 5]
var arr2=[3,4,5]
arr2.splice(0,0,'hello')
console.log(arr2) //["hello", 3, 4, 5]
4旋廷、寫一個函數(shù),操作數(shù)組,數(shù)組中的每一項變?yōu)樵瓉淼钠椒缴谠瓟?shù)組上操作
function squareArr(arr){
for(var i = 0;i < arr.length;i++){
arr[i]*=arr[i] //或者用Math函數(shù)Math.pow(arr[i], 2)
}
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]
5、寫一個函數(shù)扯罐,操作數(shù)組烦衣,返回一個新數(shù)組,新數(shù)組中只包含正數(shù)
function filterPositive(arr){
for(var i=0;i<arr.length;i++){
if(typeof arr[i] !== 'number'){
arr.splice(i,1)
i--
}
else if(arr[i] <= 0){
arr.splice(i,1)
i--
}
}
}
var arr = [3, -1, 2, '饑人谷', true]
filterPositive(arr)
console.log(arr) //[3, 2]