javascript--15-對象和json

什麼是對象

  1. js的一種數據類型

寫法

  • {}
  • new Object
  • Object.create({})

格式

  1. {鍵:值}多個 鍵值用逗號分隔 鍵表示屬性名 值表示屬性值
  2. 值:必須儲存數據 可以是任意數據類型 和數組類似 變量會被解析
  3. 鍵:鍵可以加引號,可以不加引號 可以寫字符和數值類型 其他類型不能書寫
  4. 如果鍵名和變量名一致 那麼可以直接寫變量進去 變量名錶示鍵的值 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);
      }
  }

查找屬性的值

  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循環[]取值

  1. 修改屬性的值 通過點語法直接賦值修改
<script>
 var stu={
     name:"lisi",
 }
 stu.name ="wangwu";
  console.log(stu.name);
</script>
  1. 添加值 通過點語法直接賦值添加
<script>
 var stu={
     name:"lisi",
 }
 stu.name ="wangwu";
 stu.height=180;
  console.log(stu);
</script>
  1. 刪除屬性 delete obj.x
var stu={
     name:"lisi",
     weight:20,
 }
 delete stu.weight;
  console.log(stu);
  1. 判斷對象中是否存在某個屬性 "xx" in obj 存在爲true
var stu={
     name:"lisi",
     weight:20,
 }
stu.xx="";
 if ("xx" in stu){//根據鍵判斷 跟值沒關係
     alert("存在");
 }else{
     alert("不存在");
 }

結果是存在

對比數組的取值 賦值 刪值

  1. 數組取值 arr[索引]
  2. 數組的賦值 arr[索引] = “新值”
  3. 刪除數組的元素 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>
  1. for in的缺點 性能低 因爲她還讀了原型

jason

  1. 全稱 javascript object notation js對象標記 本質是字符串
<script>
  var json = `{
      "name":"lisi",
      "age":19,
  }`
</script>

鍵必須要用雙引號包裹 值的類型可以是數組 對象 bool 字符串 數值

  1. 作用 :如果設計數據交換 不同語言之間怎麼交換數據? 不同語言的對象可能不同 但是字符串可以溝通 +json這個字符串 是特殊格式的字符串 可以表示數據的鍵和值的關係 然後不同的語言再轉化 自己能讀懂的數據即可

  2. json包括 對象 數組 字符串 數值 true false null

<script>
  var json =`{"name":"lisi",}`;
  var json2 = `["lisi","wangwu"]`;
  var json3 = "123";
  var json4 = "年後";
</script>
  1. 把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的兼容

  1. JSON.parse()/stringify()不兼容 ie7及以下
  2. 解決方法 :使用 json2.js
  • 網上找json2.js源碼 並下載
  • 只需要json2.js 在代碼中引入script
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章