日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

了解JavaScript 对象的属性操作

發布時間:2025/5/22 javascript 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 了解JavaScript 对象的属性操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  提起操作, 很多人都會想到我們學習過程中最經常做的操作, 就是對數據庫進行增, 刪, 改, 查, 既然提到這個, 那么對于對象的屬性操作也不例外, 基本上可以說也是這幾個操作.

  JS中對象的屬性標簽

  writable(可寫), enumerable(可枚舉), configurable(可配置), value(值), get/set(get, set方法). 這幾個標簽會在后面逐漸豐富, 這里先簡單介紹下.

  屬性的讀寫

  屬性的讀寫在介紹對象的時候基本已經說的差不多了, 這里補充和總結一下.?這里通過".方法", 或者通過key值的字符串作為索引讀取寫入.

  var object = {

      x : 1,

      y : 2

    };

  document.write(object.x);  // 1

  document.write(object["y"]);  // 2

  object["x"] = 3;

  object.y = 4;

  document.write(object["x"]);  //3

  document.write(object.y);  //4

  遍歷對象屬性

  一般通過for in遍歷對象的屬性, 針對上面的對象, 上代碼說話.

  var p;

  for (p in object){

    if (object.hasOwnProperty(p)){

       document.write(p + " : "object[p] + "<br />");

    }?

  }

  這段代碼旨在將object上面的全部屬性遍歷出來, 中間加了個判斷, 因為for in是將全部的屬性, 包括原型鏈上的屬性遍歷一遍的, 所以在遍歷對象屬性的時候切記不要忘記了加上判斷.

  undefined的屬性讀寫

  undefined是不具有屬性的, 所以切記不要為undefined設置屬性和讀取屬性.

  屬性的刪除

  delete關鍵字, delete是用來刪除對象的屬性和變量的. 下面演示下其用法, 順便簡單介紹下什么狀態的屬性變量可以刪除, 什么時候不可以.

  var object = {

      x : 1,

      y : 2

    };

  delete object.x;  //true

  delete object["y"];  //true

  document.write(object.x);  //undefined

  document.write(object.y);  //undefined

  上面就是成功通過delete關鍵字刪除了object的屬性, 但是delete這個方法并不是總是很有用, 這里介紹下一個新的概念DontDelete, 這個可以稱之為是一個對象的一個標簽, 如果一個對象創建的時候持有了這個標簽, 那么就不允許被刪除.?

  持有DontDelete的屬性標記情況

  顯式聲明一個變量(全局, 局部), 函數, 對象, 都持有DontDelete

?

  var variable = 1;  //顯式聲明的全局變量

  delete variable;  //false

  

  function func(){};  //顯式聲明的函數

  delete func;  //false

?

  local = 5;  //隱式設置一個全局的屬性

  delete local;  //true

?

  內建對象是自動持有DontDelete標記的, 比如函數內的arguments數組對象, 作為參數數組的內建對象, 是不允許被刪除的.

  通過eval()聲明的變量是可以刪除的, 原因也是在eval中聲明的變量創建時都不會持有DontDelete標記的.

  eval('var variable = 3;');

  variable;  //3

  delete variable;  //true

  綜上所述, 我有一點個人理解, 對錯以后隨著我的認識會回來修改, 畢竟寫東西不就是讓人推翻討論的么, 我認為delete的特性就是在非eval情況下只可以刪除一個已有對象的屬性, 而不可以刪除一段開辟的內存空間, 顯式的聲明變量其實是為變量開辟了一塊內存, 函數, 對象都是如此, 所以這些都不可以刪除, 而對象的屬性, 隱式的全局變量(其實就是上下文中this的屬性), 這些都是一個對象的屬性, 所以他們使可以刪除的. eval是JS的動態特征, 類似于OC的runtime貌似, 還沒有研究的太深, 所以就不深入討論了, 知識有限.

  屬性的檢測

  想要知道一個對象是否具有一個屬性, 有幾個方式進行檢測, 下面會細分.

  in

  如果想要簡單的判斷一個對象及其原型鏈是否具有一個屬性, 只需要使用in操作符, 它的特性就是無論是自身持有, 還是原型鏈持有, 都會返回true.

  var person = {

      name : "JianweiWang",

      age : "23",

    };

  'name' in person;  //true, 自身持有

  'hobby' in person;  //false, 自身不持有

  'toString' in person;  //true, 原型鏈持有

  in操作符的左邊通常是一個字符串, 右邊必須是一個對象.

  hasOwnProperty()方法

  這個是僅判斷當前對象是否具有屬性, 它并不會檢測原型鏈上的屬性. 所以如果需要準確的判斷對象自持有哪些屬性, 就選擇使用hasOwnProperty()方法, 參數為屬性名的字符串.

  var person = {

      name : "JianweiWang",

      age : "23",

    };

  person.hasOwnProperty('name');  //true, 自身持有

  person.hasOwnProperty('toString');  //false, 原型鏈持有

  Object.keys()方法

  這個方法的作用是將參數對象自身所持有的所有屬性(并不會有原型鏈上的屬性), 展現出來, 方法參數要求是對象.

  var person = {

      name : "JianweiWang",

      age : "23",

    };

  document.write(Object.keys(person));  //name, 23

  

轉載于:https://www.cnblogs.com/JianweiWang/p/5213843.html

總結

以上是生活随笔為你收集整理的了解JavaScript 对象的属性操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。