<script> // 物件是屬性的無序集合,每個屬性都是一個名/值對. 屬性名稱是一個字串. // 物件種類 // 內置物件(native object)是由ECMAScript規范定義的物件或類,例如,陣列、函式、日期和正則運算式都是內置物件 // 宿主物件(host object)是由JavaScript解釋器所嵌入的宿主環境(比如Web瀏覽器)定義的, 常見的宿主物件有window, document等 // 自定義物件(user-defined object)是由運行中的JavaScript代碼創建的物件,
// 物件的創建 // 物件直接量是由若干名/值對組成的,名/值對中間用冒號分隔,名/值對之間用逗號分隔,整個物件用花括號括起來, // 屬性名可以是JavaScript識別符號(即變數符號,如a,b,c)也可以是字串, // 屬性的值可以是任意型別的JavaScript運算式,運算式的值(可以是基本資料型別的值也可以是物件型別的值)就是這個屬性的值, //方法一 // let empty = {} //可以是沒人任何屬性的物件 // let person = { // name : "小小", // "name" : "小小", //加引號定義也可以 ,呼叫直接 person.name(不加引號,加引號就錯了) // height : "175cm", // weight : "50", // eating : function(){ // console.log("會吃飯"); // } // } //還可以加函式 // console.log(person); //{name: "小小", height: "175cm", weight: "50", eating: ƒ} // console.log(person.name); //小小 // //呼叫物件里面的屬性 物件名.屬性 // person.eating(); //會吃飯 //呼叫物件里面的函式,直接物件名.函式名()
// let book = { // "main title" : "JavaScript", // //屬性名字有空格的,必須用字串表示 // "sub - title" : "物件課程", // //屬性名字里有連字符的,必須用字串表示 // "for" : "學員", // //“for”是保留字,必須用引號 // author : { //該屬性的值是一個物件 // name : "aiai" // } // } // console.log(book); //{main title: "JavaScript", sub - title: "物件課程", for: "學員", author: {…}} // console.log(book.author.name); //aiai //呼叫物件里面的物件屬性里面的屬性 就一直點點點下去
//方法二 //通過關鍵字new,后面跟隨一個函式呼叫,這里的函式稱作建構式,建構式用以初始化一個新創建的物件 //JavaScript語言核心中的原始型別都包含內置建構式 //內置物件 // let oj = new Object(); //創建一個空物件 ,和{}一樣 // let date = new Date(); //創建一個表示當前時間的Date物件 // let array = new Array(); //創建一個空陣列,和[]一樣
//自定義物件 // function boy(){ //建構式 // name = "", //私有屬性(暫時不了解) // //this代表實體化后的物件 // this.sex = "男", // this.age = 25, // this.cook = function(){ // console.log("會做飯"); // } // } // let gb = new boy(); //創建物件 gb是一個物件,實體化物件 // console.log(gb.sex); //男 // gb.cook(); //會做飯
//訪問物件: //方法一,點呼叫(.) 上訴說過了 //方法二,中括號([]) // let oj = { // name : "xiao", // "1" : 1, // "name 1" : "dddd" // } // console.log(oj["1"]); //1 // console.log(oj["name 1"]); //dddd // console.log(oj["name"]); //xiao // //當然不加引號的定義也可以用[]訪問
// //設定 // oj["name 1"] = "今天是星期日"; // console.log(oj["name 1"]); //今天是星期日 // oj.name = "heihei"; // console.log(oj.name); //heihei
//物件常用操作 //洗掉物件的屬性 //delete運算子可以洗掉物件的屬性 // let oj = { // a : "1", // b : { x : 1} // } // let ob = oj.b; // console.log(oj.b); //{x: 1} // delete oj.b; // console.log(oj.b); //undefined // console.log(ob); //{x: 1} //delete只是斷開屬性和宿主物件的聯系,而不會去操作記憶體中物件的屬性的值的存在與否
// 判斷某個屬性是否存在于某個物件中 // 可以通過in運算子、hasOwnProperty() 方法 // let oj = { // a : "1", // b : { x : 1} // } // console.log( "a" in oj); //true // console.log("c" in oj); //false // console.log( oj.hasOwnProperty("a")); //true // console.log( oj.hasOwnProperty("c")); //false
//列舉物件屬性 //除了檢測物件的屬性是否存在,我們還會經常遍歷物件的屬性, 通常使用for/in回圈遍歷 // for/in回圈可以在回圈體中遍歷物件中所有可列舉的屬性(包括自有屬性和繼承的屬性) // 物件繼承的內置方法不可列舉的,但在代碼中給物件添加的屬性都是可列舉的 // for( o in oj){ // console.log(o); //a b // } // console.log(o.propertyIsEnumerable("toString")); //false
//在JavaScript中物件的屬性有兩種, 分別是資料屬性和訪問器屬性. // //資料屬性包含一個資料值的位置,在這個位置可以讀取和寫入值,資料屬性有4 個描述其行為的特性 // 程式員無法訪問到的 // [[Configurable]]:表示能否通過delete 洗掉屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性,像前面例子中那樣直接在物件上定義的屬性,它們的這個特性默認值為true, // [[Enumerable]]:表示能否通過for-in 回圈回傳屬性,像前面例子中那樣直接在物件上定義的屬性,它們的這個特性默認值為true, // [[Writable]]:表示能否修改屬性的值,像前面例子中那樣直接在物件上定義的屬性,它們的這個特性默認值為true, // [[Value]]:包含這個屬性的資料值,讀取屬性值的時候,從這個位置讀;寫入屬性值的時候,把新值保存在這個位置,這個特性的默認值為undefined //訪問器屬性 允許用戶在賦值或取值都經過預先設定的函式,從而實作內部屬性的那一種特效結果 //get / set
//獲取物件屬性的特性Object.getOwnPropertyDescriptor() // let oj = { // a : "1", // b : { x : 1} // }
// let c = Object.getOwnPropertyDescriptor(oj,"a"); // console.log(c); //{value: "1", writable: true, enumerable: true, configurable: true}
// //設定物件屬性的特性Object.defineProperty() // //傳入要修改的物件、要創建或修改的屬性的名稱以及屬性描述符物件: // Object.defineProperty(oj, "a" ,{ // writable:false // }) // oj.a = "333"; // let cg = Object.getOwnPropertyDescriptor(oj,"a"); // console.log(cg); //{value: "1", writable: false, enumerable: true, configurable: true} // console.log(oj.a); //1
</script>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/41418.html
標籤:JavaScript
