回顧基礎學習筆記:對象Object(一)

對象(Object)

一些日常的筆記,但願有所幫助bash

含義

能夠理解爲:一組"鍵值對"(key-value)的集合,是一種無序的複合數據集合。函數

let obj = {
   foo:"Hello",
   bar:"world"
}
//對象的全部鍵名都是字符串(ES6又引入了Symbol值也能夠做爲鍵名)
//因此不加引號也行
let obj2 = {
   "foo":"Hello",
   "bar":"World"
}

對象的全部鍵名都是字符串,不用引號也是能夠的。code

若是鍵名是數值 會被自動轉爲字符串

var a = {
    1: 'a',
    3.2: 'b',
    1e2: true,
    1e-2: true,
    .234: true,
    0xFF: true
};
console.log(a)
/* Object {
  1: "a",
  3.2: "b",
  100: true,
  0.01: true,
  0.234: true,
  255: true
}*/

console.log(a["100"]);// true
//看上去鍵名是數值,可是會所有自動轉換爲字符串

看上面鍵名是數值,可是會所有自動轉換爲字符串對象

鍵名不符合標識符,必須加上引號不然會報錯

// 不報錯
let b = {
   '1p': 'Hello World',
   'h w': 'Hello World',
   'p+q': 'Hello World'
};

對象的每個鍵名又稱爲「屬性(property)」,他的鍵值(value)能夠是任何數據類型

let c= {
   p: function (x) {
        return 2 * x;
    }
};
console.log(c.p(3));//6
// c對象的屬性p,指向一個函數

上面c對象的屬性p,指向一個函數繼承

對象也能夠動態建立,沒必要在對象聲明時就指定

let d = {};
d.foo = 123;
console.log(d.foo);//123

1.1屬性的讀取

let e = {
   p:"hello world"
}
console.log(e.p);//hello world
console.log(e["p"]);//hello world

使用[]時鍵名必須放在引號裏面,不然會被當作變量處理字符串

let f = {
    123: 'hello world'
};

// fff.123 // 報錯
f[123] // "hello world"

數字鍵能夠不用引號。可是不能用點運算io

1.2屬性的查看

// js容許屬性後綁定
let g = {};
g.foo = "Hello";
g["bar"] = "World";
let h ={p:1};
//等價於
let j={};
j.p =1;

1.3屬性的查看

let i = {
    key1:1,
    key2:2
}
console.log(Object.keys(i));

1.4屬性的刪除

let k={p:1};
console.log(Object.keys(k));//["p"]
delete k.p;
console.log(k.p);//1
console.log(Object.keys(k));//[]

值得注意的,刪除不存在的屬性,照樣返回trueconsole

let l = {};
console.log(delete obj.p);//true

注意:delete沒法刪除繼承屬性function

1.5判斷屬性是否存在

// in運算符有一個問題,他不能識別哪些屬性是對象自身的,哪些是繼承的
let m = {p:1};
console.log("p" in m);//true
console.log('toString' in m);//true
// 這時須要hasOwnProperty的方法判斷一下,是否爲對象自身屬性
let n ={};
 if('toString' in obj){
     console.log(n.hasOwnProperty('toString'));//false
 }

1.6屬性的遍歷

var o = {a: 1, b: 2, c: 3};

for (let i in o) {
console.log('鍵名:', i);
console.log('鍵值:', o[i]);
}
// 鍵名: a
// 鍵值: 1
// 鍵名: b
// 鍵值: 2
// 鍵名: c
// 鍵值: 3

// for  in須要注意的兩個點
// 1:他遍歷的是對象全部可遍歷的屬性,會跳過不可遍歷的屬性
// 2:不只遍歷自身的屬性,還遍歷繼承的屬性

只遍歷自身屬性class

let person = {name:"123"}
for(let key in person){
    if(person.hasOwnProperty(key)){
        console.log(key);
    }
}
相關文章
相關標籤/搜索