什麼是對象
- js的一種數據類型
寫法
- {}
- new Object
- Object.create({})
格式
- {鍵:值}多個 鍵值用逗號分隔 鍵表示屬性名 值表示屬性值
- 值:必須儲存數據 可以是任意數據類型 和數組類似 變量會被解析
- 鍵:鍵可以加引號,可以不加引號 可以寫字符和數值類型 其他類型不能書寫
- 如果鍵名和變量名一致 那麼可以直接寫變量進去 變量名錶示鍵的值
var name ="lisi"; var obj = {name}
變量值表示
<script>
var a = {
name:"lisi",
leg:2,
wings:2,
sing:function () {
alert(1);
}
}
console.log(a);
</script>
var a = "name";
var obj = {
a:"lisi",//a不會被解析爲李四 因爲會被認爲是字符串
leg:2,
wings:2,
sing:function () {
alert(1);
}
}
var a = "name";
var obj = {
a:a,//右側a會被解析爲李四
leg:2,
wings:2,
sing:function () {
alert(1);
}
}
查找屬性的值
- 對象取值 obj["字符串"]可以代替obj.字符串 使用中括號語法或者點語法 類數組是對象 有length屬性和數值的鍵
<script>
var stu={
name:"lisi",
age:19,
height:180,
}
console.log(stu.name);
console.log(stu["name"]);
</script>
<script>
var stu={
name:"lisi",
age:19,
height:180,
1:"haha",
}
console.log(stu.name);
console.log(stu["name"]);
console.log(stu["1"]);//當鍵是數值時,只能用[]取值 變量定義規則是不能數字開頭
</script>
類數組和數組一樣都有length屬性 但是類數組是個對象 並不是數組 數組自帶length屬性 類數組可以通過對象中的鍵值對達到數組的效果 數組沒有鍵值對關係 裏面存的是值
var stu={
0:"lisi",
1:"name",
2:20,
length:3,
}
console.log(stu);
當鍵是數值 取值是 console.log(stu[0])
這也是爲什麼類數組可以for循環[]取值
- 修改屬性的值 通過點語法直接賦值修改
<script>
var stu={
name:"lisi",
}
stu.name ="wangwu";
console.log(stu.name);
</script>
- 添加值 通過點語法直接賦值添加
<script>
var stu={
name:"lisi",
}
stu.name ="wangwu";
stu.height=180;
console.log(stu);
</script>
- 刪除屬性 delete obj.x
var stu={
name:"lisi",
weight:20,
}
delete stu.weight;
console.log(stu);
- 判斷對象中是否存在某個屬性 "xx" in obj 存在爲true
var stu={
name:"lisi",
weight:20,
}
stu.xx="";
if ("xx" in stu){//根據鍵判斷 跟值沒關係
alert("存在");
}else{
alert("不存在");
}
結果是存在
對比數組的取值 賦值 刪值
- 數組取值 arr[索引]
- 數組的賦值 arr[索引] = “新值”
- 刪除數組的元素
delete arr[索引]
遍歷對象
<script>
var oArr ={
0:"你好",
1:"我好",
2:"她好",
length:"3",
}
for (var i=0;i<oArr.length;i++){
console.log(oArr[i]);
}
</script>
但是
<script>
var oArr ={
name:"你好",
age:"我好",
height:"她好",
length:"3",
}
for (var i=0;i<oArr.length;i++){
console.log(oArr[i]);
}
</script>
這樣是取不出來的 需要新的屬性
for in 循環 性能很低
<script>
var oArr ={
name:"你好",
age:"我好",
height:"她好",
length:"3",
}
for (var key in oArr){//通過key取鍵
console.log(oArr[key]);//key是變量 並不是oArr的屬性 不能寫oArr.kry
}
</script>
- for in的缺點 性能低 因爲她還讀了原型
jason
- 全稱 javascript object notation js對象標記 本質是字符串
<script>
var json = `{
"name":"lisi",
"age":19,
}`
</script>
鍵必須要用雙引號包裹 值的類型可以是數組 對象 bool 字符串 數值
作用 :如果設計數據交換 不同語言之間怎麼交換數據? 不同語言的對象可能不同 但是字符串可以溝通 +json這個字符串 是特殊格式的字符串 可以表示數據的鍵和值的關係 然後不同的語言再轉化 自己能讀懂的數據即可
json包括 對象 數組 字符串 數值 true false null
<script>
var json =`{"name":"lisi",}`;
var json2 = `["lisi","wangwu"]`;
var json3 = "123";
var json4 = "年後";
</script>
- 把js的數據轉換成json
JSON.stringify()
序列化 :遇到函數json自動捨去 對象 數組 字符串 數值 true false null
<script>
var oArr ={
name:"你好",
age:"我好",
height:"她好",
length:"3",
}
console.log(JSON.stringify(oArr));
</script>
5.將json轉化成對象 反序列化 JSON.parse(json)
<script>
var json =`{"name":"lisi"}`
console.log(JSON.parse(json));
</script>
json2的兼容
JSON.parse()/stringify()
不兼容 ie7及以下- 解決方法 :使用 json2.js
- 網上找json2.js源碼 並下載
- 只需要json2.js 在代碼中引入script