
目錄
一、JavaScript資料型別:
物件的分類:
1.內置物件:
2.宿主物件:
3.自定義物件:
二、物件屬性的操作:
三、基本資料型別&參考資料型別:
四、物件的創建:
使用物件字面量創建物件:
使用工廠方法創建物件:
五、Function函式:
1.函式物件的創建:
2.函式的引數&回傳值:
3.立即執行函式:
4.物件的成員方法:
5.列舉物件屬性:
六、作用域:
1.全域作用域:
變數的宣告提前:
函式的宣告提前:
2.區域作用域(函式作用域):
七、this關鍵字:
八、建構式&類概念的提出:
建構式執行流程:
九、原型物件:
一、JavaScript資料型別:

物件的分類:
1.內置物件:
由ES標準中定義的物件,在任何得ES的實作中都可以使用,
- String物件:字串物件,提供了對字串進行操作的屬性和方法,
- Array物件:陣列物件,提供了陣列操作方面的屬性和方法,
- Date物件:日期時間物件,可以獲取系統的日期時間資訊,
- Boolean物件:布爾物件,一個布爾變數就是一個布爾物件,(沒有可用的屬性和方法)
- Number物件:數值物件,一個數值變數就是一個數值物件,
- Math物件:數學物件,提供了數學運算方面的屬性和方法,
- Object物件、RegExp物件、 Global物件、Function物件,
2.宿主物件:
由JavaScript的運行環境提供的物件,目前來講主要是由瀏覽器提供的物件
- BOM
- DOM
3.自定義物件:
由開發人員自己創建的物件
二、物件屬性的操作:
// 創建物件:使用new關鍵字,呼叫Object()構造方法constructor
var obj01 = new Object();
//控制臺輸出創建的實體物件:
console.log(typeof obj01); //使用typeof輸出變數型別
//向物件添加屬性:語法:物件名.屬性名 = 屬性值;
obj01.name = "屬性01";
//從物件中讀取屬性值:語法:物件名.屬性名;
console.log(obj01.name);
//修改屬性:物件名.屬性名 = 屬性值;
obj01.name = "屬性02";
//洗掉屬性:delete 物件名.屬性名;
delete obj01.name;
物件的屬性名,不強制遵守識別符號規范,如果使用特殊的屬性名,不能采用:物件名.屬性名 = 屬性值; 的方式來操作,需要使用:物件[屬性名] = 屬性值;
使用 [ ] 這種形式去操作屬性,更加靈活,在 [ ] 中可以傳遞一個變數,這樣可以讀取到傳入變數所對應的值,
運算子優先級:
in 運算子:檢查一個物件中是否含有指定的屬性,語法:屬性名 in 物件名
三、基本資料型別&參考資料型別:
- 基本資料型別的值直接在堆疊記憶體中存盤,值與值之間是獨立存在的,修改一個變數不會影響到其它變數
- 物件是保存到堆記憶體的,每創建一個新的物件,就會在堆記憶體中開辟出一個新的空間,而堆疊記憶體中變數保存的是物件的記憶體地址(物件的參考,指向堆記憶體空間),如果兩個變數保存的是同一個物件參考,當通過一個變數去修改物件屬性時,另一個也會受到影響,
- 比較兩個基本資料型別變數時,比較的是值,而比較兩個參考資料型別時,它是比較的物件的記憶體地址,如果兩個物件一模一樣,但是地址不同,比較的回傳值仍然是false
四、物件的創建:
- 使用new關鍵字
- 使用物件字面量:var obj = { };
使用物件字面量創建物件:
語法:var obj = { 屬性名:屬性值,屬性名:屬性值,...... };
- 物件字面量的屬性名可以加引號也可以不加,建議不加
- 如果要使用一些特殊字符,則必須加引號
- 屬性名和屬性值是一組鍵值對結構,鍵和值之間使用 : 進行連接,多個鍵值對之間使用逗號隔開,最后一個鍵值對后不加逗號!
使用工廠方法創建物件:
// 使用工廠方法創建物件:
function factory(name, age, gender){
//使用字面量創建物件:
obj = {
name: name,
age: age,
gender: gender
};
return obj;
}
//直接使用工廠函式創建物件
var obj01 = factory("krian", 19, "man");
// 使用工廠方法創建物件:
function factory(name, age, gender){
// 使用new關鍵字創建物件
var obj = new Object();
obj.name = name;
obj.age = age;
obj.gender = gender;
return obj;
}
//直接使用工廠函式創建物件
var obj01 = factory("krian", 19, "man");
五、Function函式:
函式也是一個物件!(在網頁中所能看到的都是物件),函式中可以封裝一些功能,在需要的時候可以執行這些功能!
1.函式物件的創建:
//創建一個函式物件
var fun01 = new Function();
使用函式宣告來創建一個函式:
function fun02(){
console.log("這是通過函式宣告創建的函式物件!");
}
//使用函式名呼叫函式:
fun02();
2.函式的引數&回傳值:
- 呼叫函式時,決議器不會檢查引數型別
- 呼叫函式時,決議器不會檢查引數數量
function fun03(number01, number02){
sum = number01 + number02;
return sum;
}
var result = fun03(11,11);
console.log("計算結果 = " + result);
注意:return后的陳述句都不會執行,函式在執行return后結束!
3.立即執行函式:
函式被定義完成之后立即被呼叫,匿名函式,只執行一次!
//立即執行函式,該類函式只執行一次,且立即執行:(匿名函式的呼叫)
(function(){
//在控制臺回圈輸出0-9:
for(i = 0; i < 10 ; i++){
console.log(i)
}
})();
4.物件的成員方法:
//創建一個person物件:
var person = {
name: "krian",
age: 19,
}
//指定物件屬性為一個方法,物件的方法屬性:
person.fun01 = function(name, age){
console.log("名字:" + name + "\t年齡:" + age);
}
//呼叫物件的方法屬性:
person.fun01(person.name,person.age);
5.列舉物件屬性:
//使用 for in 列舉物件屬性:
var person = {
name: "kiran",
age: 19,
habit: "listening music and conding",
school: {
school_name: "CQUPT",
school_local: "chongqing"
},
show: function(name, age, habit, school){
console.log("姓名:" + name + "\t年齡:" + age + "\t興趣:" + habit);
}
}
//使用forin變數物件的成員屬性:
for(var a in person){
console.log(a); //a對應的成員屬性的名
console.log(person[a]); //取出屬性值
}
六、作用域:
1.全域作用域:
- 直接撰寫在script標簽中的JavaScript代碼,都在全域作用域
- 全域作用域在頁面打開時創建,在頁面關閉時銷毀
- 在全域作用域中有一個全域物件window,我們可以直接使用
- 在全域作用域中,創建的變數都會作為window物件的屬性保存,創建的函式都會作為window的方法保存
- 全域作用域中的變數都是全域變數,在頁面中任意部分都能被訪問
變數的宣告提前:
使用var關鍵字宣告的變數,會在所有代碼之前被宣告(但是不會賦值),但是如果宣告變數時不使用var關鍵字,則變數不會被宣告提前,
函式的宣告提前:
使用函式宣告形式創建的函式function 函式名 ( ) { } ,他會在所有代碼執行之前就被創建,所以,我們可以在函式宣告之前呼叫函式
2.區域作用域(函式作用域):
- 呼叫函式時創建函式作用域,函式執行完畢以后,函式作用域銷毀
- 每呼叫一次函式就會創建一個新的函式作用域,他們之間是相互獨立的
- 函式作用域可以訪問到全域作用域的變數,在全域作用域中無法訪問到函式作用域中的變數
- 當在函式作用域操作一個變數時,它會先在自身作用域中尋找,如果有直接使用,如果沒有則向上一級作用域中尋找,直到找到全域作用域,如果全域作用域中依然沒有找到,則會報錯,
- 在函式作用域中訪問全域變數可以使用window物件
七、this關鍵字:
決議器在呼叫函式每次都會向函式內部傳遞一個隱含的引數,這個隱含引數就是this,this指向的是一個物件,這個物件我們稱為函式執行的行的背景關系物件,根據函式的呼叫不同,this指向的物件不同,
- 以函式形式呼叫時,this永遠都是window
- 以方法形式呼叫時,this就是呼叫方法的那個物件
- 當以建構式的形式呼叫時,this就是新創建的那個物件
八、建構式&類概念的提出:
建構式就是一個普通的函式,創建方式和普通函式沒有區別,不同的是建構式習慣上首字母大寫,建構式和普通函式的區別是呼叫的方式不同,普通函式是直接呼叫,而建構式需要使用new關鍵字來呼叫,
建構式執行流程:
- 立即創建一個新的物件
- 將新建物件設定為函式中的this,在建構式中可以使用this參考新建物件
- 逐行執行函式中的代碼
- 將新建的物件作為回傳值回傳
使用同一個建構式創建的物件,我們稱為一類物件,也將一個建構式稱為一個類!
// 使用建構式創建物件:(也就是定義了一個Person類)
function Person(name, age, gender){
this.name = name;
this.age = age;
this.gender = gender;
}
// 使用new關鍵字呼叫建構式:
var per01 = new Person("krian", 19, "man");
// 檢查per01是不是Pserson類的一個實體:
console.log(per01 instanceof Person); // true
如果直接在建構式中定義一個成員方法,在建構式內部創建方法時,每一次呼叫構造方法就都會重新創建一個新的方法,因為方法一模一樣,所以完全可以使物件共用一個方法,
九、原型物件:
我們所創建的每一個函式,決議器都會向函式添加一個屬性prototype,這個屬性對應了一個物件,原型物件,如果函式作為普通函式呼叫時prototype沒有任何作用,當函式以建構式的形式呼叫時,它創建的物件中都會有一個隱含的屬性,指向該建構式的原型物件,我們可以通過__proto__來訪問該屬性,
原型物件就相當于一個公共區域,所有同一個類的實體都可以訪問到這個原型物件,我們可以通過這個原型物件設定共有內容,
// 使用建構式創建物件:(也就是定義了一個Person類)
function Person(name, age, gender){
this.name = name;
this.age = age;
this.gender = gender;
}
// 呼叫物件的原型物件屬性,設定公共區域共有的內容:
Person.prototype.show = function(){
console.log("姓名:" + this.name + "\t年齡:" + this.age + "\t性別:" + this.gender );
}
// 使用new關鍵字呼叫建構式:
var per01 = new Person("krian", 19, "man");
var per02 = new Person("zhangsan", 20, "woman");
per01.show();
per02.show();
原型物件也是物件,所以他也有原型,當我們使用一個物件的屬性或者方法時,會先在自身中尋找,自身中如果沒有,則直接使用,如果沒有則去原型中尋找,如果原型物件中有,則使用,如果沒有繼續去原型的原型中去尋找,直到找到Object物件的原型,Object的原型物件沒有原型,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/400586.html
標籤:其他
上一篇:點擊標題標簽切換顯示對應內容
下一篇:安卓開發:經期助手App

