2020-03-31JavaScript[5](十九)

對象

  • 何為對象:萬物皆對象,客觀世界中具體的實體就是對象,每一個對象都有對應的特征

數(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 對象名.屬性名;

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運算符

  • 構造函數(shù)名大寫

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ù)類型存儲的是地址值;如果把一個對象賦值給另一個變量,此時兩個變量會指向同一個對象
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容