對象
- 何為對象:萬物皆對象,客觀世界中具體的實體就是對象,每一個對象都有對應的特征
數(shù)組,函數(shù)與對象
數(shù)組:
- 是有序的元素的集合,數(shù)組用于存放一組數(shù)據(jù),比如一個班級所有人的名字或成績
函數(shù):
- 封裝一段重復使用的代碼,只要聲明一次,就可以使用多次
對象:
- 是一組無序的鍵值對的集合(鍵:值,)
- 事物的特征在對象中用屬性來表示
- 事物的行為在對象中用方法來表示
//數(shù)組多個元素之間使用,隔開
//對象中多個鍵值對之間也用,隔開,,,鍵值對的格式: 鍵:值
var obj = {
name:"張三",
age:18,
sex:"男",
hobby:"上網(wǎng)",
greet: function() {
console.log('你好呀?。?);
}
}
操作對象
增,改:
- 對象名.屬性名 = 新的值;
- 如果已經(jīng)存在該屬性,就是修改;如果沒有該屬性,就是增加
obj.name = 'ls';
obj.age = 38;
增語法: 和改語法是一樣的, 如果該屬性是存在的就是改 如果不存在就是添加
obj.girlFriend = 'wmz';
刪:
delete obj.girlFriend
查:
console.log(obj.name);
console.log(obj.age);
創(chuàng)建對象和使用
字面量形式:
- 字面量表示如何表達這個值,一般除去表達式,給變量賦值時,等號右邊都可以認為是字面量。
- 字面量分為字符串字面量(string literal )、數(shù)組字面量(array literal)和對象字面量(object literal),另外還有函數(shù)字面量(function literal)。
var test="hello world!";
//"hello world!"就是字符串字面量,test是變量名。
var o = {
name : "zs",
age : 18,
sex : true,
sayHi : function() {
console.log(this.name);
}
};
構造函數(shù):
var hero = new Object({
name: 'zs',
age: 18
});
//JS內部提供的
// 得到數(shù)組的實例
var arr = new Array(1,2,3);
console.log(arr);
// 得到普通對象的實例
var obj = new Object({name:123});
console.log(obj);
// 得到函數(shù)的實例
var fn = new Function('a','b','c','d');
console.log(fn);
// 得到數(shù)字的實例
var num = new Number(123);
console.log(num);
// 得到布爾的實例
var bool = new Boolean(true);
console.log(bool);
// 得到字符串的實例
var str = new String('123');
console.log(str);
構造函數(shù)與new運算符
function Student (name, age, hobby, gender){
this.name = name;
this.age = age;
this.hobby = hobby;
this.gender = gender;
}
var obj = new Student('小馬哥', 18, '開車', '未知');
JS普通函數(shù)和構造函數(shù)的區(qū)別
new運算符
- 創(chuàng)建一個新的對象,類型從屬于對應的構造函數(shù)
- 將this指向這個新對象
- 執(zhí)行構造函數(shù)
- 返回這個新對象
- new運算符一般配合構造函數(shù)使用,并且具有原型關系和數(shù)據(jù)類型
工廠函數(shù)
- 實際開發(fā)中需要創(chuàng)建許多對象,一個一個創(chuàng)建過于麻煩,所以采用工廠函數(shù)(利用函數(shù)封裝一個制作對象的方法,傳參調用)
- 雖然可以同時創(chuàng)建多個對象,但是沒有原型關系,沒有自己的類型
// 上述都是重復去做一件事情 重復去做一件事情 我們就可以利用function封裝 然后重復調用 傳遞對應的參數(shù)
function creatStudent(name, age, height, hobby) {
var obj = {
name: name,
age: age,
height: height,
hobby: hobby,
sayHi: function () {
console.log('Hello everyone');
},
study: function () {
console.log('好好學習 天天向上');
}
}
return obj;
}
var xmg = creatStudent('xmg', '16', 180, '嘿嘿');
var wt = creatStudent('wt', '14', 180, '嘻嘻');
var ff = creatStudent('ff', '18', 110, '呼呼');
[ ]語法操作對象
- 對象["屬性名"];
- []語法可以使用變量代替屬性,但是點語法就不可以,如果[]語法里面的值添加了引號那么與點語法相同
var obj = {
name: 'feifei',
age: 18,
gender: '男',
i: 1
};
console.log(obj.age);
var obj1 = {
name: '馬哥',
'true-age': 20
}
console.log(obj1);
// 關聯(lián)數(shù)組的方式
console.log(obj1["true-age"]);
// 點語法可以操作對象的屬性 但是如果屬性名中有-這些特殊字符的 通過.語法就操作不了
// 但是我們可以利用關聯(lián)數(shù)組的方式去操作
// 對象['屬性名'] 或者 對象.屬性名
var i = "name";
console.log(obj.i); // undefined 因為JS解析器會把I作為對象的屬性 而當前對象并沒有i這個屬性 所以是udnefined
console.log(obj[i]);// 關聯(lián)數(shù)組的方式不加引號 會解析成變量 將變量里面存的值作為對象屬性
console.log(obj["i"]); // 添加上了引號 直接解析成對象對應的屬性
遍歷對象
- for in語法:使用for (var attr in 對象) {}的形式遍歷對象
- attr為變量,當我們打印attr時,會發(fā)現(xiàn)打印出來對象的每一個屬性
格式:
var obj = {
name: 'feifei',
age: 15,
gender: 'male'
};
for(var attr in obj){
// console.log('1');
// console.log(attr);
console.log(obj[attr]);
}
引用數(shù)據(jù)類型和值數(shù)據(jù)類型
- 簡單數(shù)據(jù)類型(值類型):在存儲時,變量本身中存儲的是值本身,因此叫值類型(number,string,boolean....)
var a = 1;
var b = a;
b = 2;
console.log(a); // 1
- 復雜數(shù)據(jù)類型(引用類型):在存儲時,變量中存儲的是地址(引用),因此叫引用數(shù)據(jù)類型(array,object,function)
var a = {
name: 'zs'
}
var b = a;
b.name = 'ls';
console.log(a.name) // ls
- 簡單數(shù)據(jù)類型存儲的是值本身,復雜數(shù)據(jù)類型存儲的是地址值;如果把一個對象賦值給另一個變量,此時兩個變量會指向同一個對象