1.對象(Object)
- 對象是JS中的引用數據類型
- 對象是一種複合數據類型,在對象中可以保存多個不同數據類型的屬性
- 使用typeof檢查一個對象時,會返回object
- 創建對象
- 方式一:
- var obj = new Object();
- 方式二:
- var obj = {};
- 向對象中添加屬性
- 語法:
對象.屬性名 = 屬性值;
對象["屬性名"] = 屬性值;
- 對象的屬性名沒有任何要求,不需要遵守標識符的規範,
但是在開發中,儘量按照標識符的要求去寫。
- 屬性值也可以任意的數據類型。
- 讀取對象中的屬性
- 語法:
對象.屬性名
對象["屬性名"]
- 如果讀取一個對象中沒有的屬性,它不會報錯,而是返回一個undefined
- 刪除對象中的屬性
- 語法:
delete 對象.屬性名
delete 對象["屬性名"]
- 使用in檢查對象中是否含有指定屬性
- 語法:"屬性名" in 對象
- 如果在對象中含有該屬性,則返回true
如果沒有則返回false
- 使用對象字面量,在創建對象時直接向對象中添加屬性
語法:
var obj = {
屬性名:屬性值,
屬性名:屬性值,
屬性名:屬性值,
屬性名:屬性值
}
eg:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 創建一個對象
*/
var obj = new Object();
//向對象中添加屬性
obj.name = "孫悟空";
obj.age = 18;
//對象的屬性值可以是任何的數據類型,也可以是個函數
obj.sayName = function(){
console.log(obj.name);
};
function fun(){
console.log(obj.name);
};
//console.log(obj.sayName);
//調方法
obj.sayName();
//調函數
//fun();
/*
* 函數也可以稱爲對象的屬性,
* 如果一個函數作爲一個對象的屬性保存,
* 那麼我們稱這個函數時這個對象的方法
* 調用這個函數就說調用對象的方法(method)
*
* 但是它只是名稱上的區別沒有其他的區別
*
*/
var obj2 = {
name:"豬八戒",
age:18,
sayName:function(){
console.log(obj2.name);
}
};
obj2.sayName();
</script>
</head>
<body>
</body>
</html>
- 基本數據類型和引用數據類型
- 基本數據類型
String Number Boolean Null Undefined
- 引用數據類型
Object
- 基本數據類型的數據,變量是直接保存的它的值。
變量與變量之間是互相獨立的,修改一個變量不會影響其他的變量。
- 引用數據類型的數據,變量是保存的對象的引用(內存地址)。
如果多個變量指向的是同一個對象,此時修改一個變量的屬性,會影響其他的變量。
- 比較兩個變量時,對於基本數據類型,比較的就是值,
對於引用數據類型比較的是地址,地址相同才相同
2.函數(Function)
- 函數也是一個對象,也具有普通對象的功能
- 函數中可以封裝一些代碼,在需要的時候可以去調用函數來執行這些代碼
- 使用typeof檢查一個函數時會返回function
- 創建函數
- 函數聲明
function 函數名([形參1,形參2...形參N]){
語句...
}
- 函數表達式
var 函數名 = function([形參1,形參2...形參N]){
語句...
};
eg:
- 調用函數
- 語法:函數對象([實參1,實參2...實參N]);
fun() sum() alert() Number() parseInt()
- 當我們調用函數時,函數中封裝的代碼會按照編寫的順序執行
- 形參和實參
- 形參:形式參數
- 定義函數時,可以在()中定義一個或多個形參,形參之間使用,隔開
定義形參就相當於在函數內聲明瞭對應的變量但是並不賦值,
形參會在調用時才賦值。
- 實參:實際參數
- 調用函數時,可以在()傳遞實參,傳遞的實參會賦值給對應的形參,
調用函數時JS解析器不會檢查實參的類型和個數,可以傳遞任意數據類型的值。
如果實參的數量大於形參,多餘實參將不會賦值,
如果實參的數量小於形參,則沒有對應實參的形參將會賦值undefined
eg:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 函數作用域
* - 調用函數時創建函數作用域,函數執行完畢以後,函數作用域銷燬
* - 每調用一次函數就會創建一個新的函數作用域,他們之間是互相獨立的
* - 在函數作用域中可以訪問到全局作用域的變量
* 在全局作用域中無法訪問到函數作用域的變量
* - 當在函數作用域操作一個變量時,它會先在自身作用域中尋找,如果有就直接使用
* 如果沒有則向上一級作用域中尋找,直到找到全局作用域,
* 如果全局作用域中依然沒有找到,則會報錯ReferenceError
* - 在函數中要訪問全局變量可以使用window對象
*/
//創建一個變量
var a = 10;
function fun(){
var a = "我是fun函數中的變量a";
var b = 20;
//console.log("a = "+a);
function fun2(){
console.log("a = "+window.a);
}
fun2();
}
//fun();
//console.log("b = "+b);
/*
* 在函數作用域也有聲明提前的特性,
* 使用var關鍵字聲明的變量,會在函數中所有的代碼執行之前被聲明
* 函數聲明也會在函數中所有的代碼執行之前執行
*/
function fun3(){
fun4();
//console.log(a);
var a = 35;
function fun4(){
alert("I'm fun4");
}
}
//fun3();
var c = 33;
/*
* 在函數中,不適用var聲明的變量都會成爲全局變量
*/
function fun5(){
//console.log("c = "+c);
//c = 10;
//d沒有使用var關鍵字,則會設置爲全局變量
d = 100;
}
fun5();
//在全局輸出c
//console.log("d = "+d);
var e = 23;
/*
* 定義形參就相當於在函數作用域中聲明瞭變量
*/
function fun6(e){
alert(e);
}
fun6();
</script>
</head>
<body>
</body>
</html>