對象的動態特性是指:在對象創建出來之後,爲對象添加新的屬性或者方法。
給對象添加屬性和方法有兩種:
- 點語法
- []
使用點語法給對象添加屬性和方法
var obj = {
name: "kong",
age:23
}
// 使用點語法 : 給obj對象添加屬性和方法
obj.hobby = "runing";
obj.eat = function(){
console.log("開開心心的大喫!")
}
console.log(obj);
obj.eat();
如果給代碼做些變化呢
obj.name = "diligentkong";
console.log(obj.name); //輸出 diligentkong
**使用點語法進行賦值的時候,如果對象存在該屬性,是修改操作;
如果對象不存在該屬性,是給該對象新增屬性並且賦值**
使用中括號[]的方法
對象名[屬性名] 注意:這裏的屬性名是字符串
通過對象名[屬性名]的方式可以做到:
1.獲取對象的屬性值
2.修改對象的屬性值
3.爲對象新增屬性並賦值
看例子
獲取對象的屬性:這是獲取obj的name屬性
console.log(obj["name"]); //diligentkong
修改對象的屬性值,將obj對象的name屬性的值修改爲kongkong
obj["name"] = "kongkong";
console.log(obj["name"]); //kongkong
// 爲對象新增屬性並賦值
obj["sing"] = {
singer : "張信哲"
};
console.log(obj["sing"]);
obj["drink"]=function(){
console.log("我喜歡和白開水");
}
obj[drink](); //我喜歡和白開水
這裏要說一下in關鍵字
in關鍵字的用法
1.在for..in 循環中遍歷對象的鍵
2.判斷屬性是否存在對象中 語法: 屬性名 in 對象
舉例:
for...in
var obj = {
name:'kong',
age:23
}
for (var k in obj) {
console.log(k);//輸出 name age
console.log(typeof k); //輸出 string string
}
通過以上可以發現 對象的鍵爲string字符串類型
也就是說 使用in關鍵字的時候,屬性名稱爲字符串類型,需要用引號引起來
舉例:
var paraName = "name";
var isExsit = paraName in obj;
console.log(isExsit); // true
簡單寫成:
console.log("hobby" in obj);
在混入式繼承關係上,如果要把一個對象的屬性和方法 拿過來用到另一個獨享上,要使用[]的方式獲取屬性、添加屬性。若是使用點語法,那麼會把k當做變量,而不是對象的鍵。看例子
//當前沒有的屬性和方法,別人有,拿過來用 ,就是繼承(繼承後續會解釋的)
var o = {
}
var obj = {
name :"diligentkong",
age : 18,
sayHello :function () {
console.log("Hello world");
}
}
//混入式繼承
for(var k in obj){
// 一定要使用[]的方式,否則會把k當做屬性
o[k] = obj[k];
}
console.log(o);
in 關聯數組
var arr=[2,4,6,8,10];
console.log(0 in arr); // 輸出true
剛纔提到 對象的鍵是字符串類型,爲什麼在關聯數組的時候,打印輸出的是true呢?
因爲 in關鍵字操作數組的時候判斷的是索引是否存在而不是值,當索引不是字符串的時候,會做一個隱式轉換,將0 修改爲”0”
看
console.log("0" in arr); // true
也就是console.log(0 in arr); <=>console.log("0" in arr); // true 隱式轉換
如何判斷數組中是否存在指定的值
- for循環 如果找到了就輸出
- indexOf 返回值爲指定的數對應的索引,如果沒有找到 返回-1
console.log(arr.indexOf(9)); // -1
delete關鍵字
1.delete關鍵字可以用來刪除對象的屬性,還有未使用var聲明的變量
2.delete關鍵字有返回值 用來表示刪除屬性是否成功
3.如果刪除的是不存在的屬性,返回值爲true
4.如果刪除的屬性存在原型當中,那麼返回值爲true,但是並未刪除
自己對號入座吧!
var obj = {
name : "kong",
age : 20
}
console.log(obj.name);
var result = delete obj.name;
console.log(obj.name, result); // undefined true
var num = 10;
num1 = 100;
console.log(num1); //100
result = delete num1;
console.log(window.num1, result); // undefined true
var num = 10;
var result = delete num;
console.log(result); //false
var result= delete obj.gender;
console.log(result); //true
console.log(obj.toString()); //[object Object]
var result = delete obj.toString;
console.log(result); //true
console.log(obj.toString());//[object Object]