函數 對象 入門總結

函數

什麼是函數

函數是定義一次但能夠調用或執行任意屢次的一段JavaScript代碼。數組

函數也叫作方法(瞭解概念)函數

當一個函數在一個對象上被調用的時候,這個函數就叫作方法。 此時, 它的調用所在的對象就會做爲函數的一個隱式的參數來傳遞。this

// 函數
function func() {
 
}
 
var obj = {
    age: 18,
    getAge: function() {
        // 方法
    }
};
//函數:是直接調用
//方法:是經過對象調用的

JavaScript中的函數能作什麼?

  • 1 封裝代碼,實現代碼複用(最基本的做用)
  • 2 做爲數據來傳遞(回調函數)
  • 3 做爲構造函數,建立對象
  • 4 做爲一個做用域

 

函數的語法

// 函數聲明的基本語法
// function關鍵字、funcname、小括號、大括號都是必需的
// 參數不是必需的
function funcname([arg1 [,arg2 [..., argn]]]) {
    statements
}
 
// 函數調用語法:函數名後面跟運算符()來調用
funcname();
  • 函數聲明的注意點:

1 函數聲明不能出如今相似:if語句中(儘管不報錯,但這是糟糕的作法!若是這麼作了,容易出現混亂)對象

2 funcname是要定義的函數名,必須是一個標識符(不要使用保留字或關鍵字),而不能是字符串或者表達式。ip

3 包含在小括號中的0個或多個參數,參數用逗號隔開作用域

4 大括號內的是函數主體,包含了多條語句字符串

5 return語句,無關緊要。get

6 函數命名推薦使用帕斯卡命名法,即第一個單詞後的全部單詞都以一個大寫字母開始。回調函數

函數參數

//形參(函數聲明時候的參數)
function f(a, b) {} // a,b是形參,佔位用,函數定義時形參無值
 
//實參(函數調用時候的參數)
var x = 5,
    y = 6;
f(x, y); //x,y實參,有具體的值,會把x,y複製一份給函數內部的ab

 

 arguments介紹

  • 做用:保存函數的實際參數
  • arguments僅在函數內部有效。
  • arguments是一個僞數組(即,只是與數組相似,並不是一個真正的數組)

由於可使用方括號語法訪問它的每個元素(即第一個元素是 arguments[0] ,第二個元素是 argumetns[1] ,以此類推),使用 length 屬性來肯定參數長度。 沒有傳遞值的命名參數將自動被賦予 undefined 值,跟定義了變量但又沒有初始化同樣。string

function testArguments() {
  console.log("第一個參數爲:" + arguments[0]);
}
 
testArguments("123"); // 第一個參數爲:123

函數表達式(函數直接量、函數字面量)

 基本語法

// funcname 能夠省略
var func = function funcname() {
  statements
};
  • 注意點:函數表達式中function後面的函數名,只能在函數內部使用;函數外部訪問會報錯!
var func = function fun () {
    console.log(fun); // 函數體
};
 
func();
 
console.log(fun); // Uncaught ReferenceError: fun is not defined

函數表達式與函數聲明的異同

  • 不一樣點:
    • 1 語法不一樣,函數表達式被用做表達式,而不是用做語句,並且也無需指定函數名
    • 2 函數表達式中,function後面的funcname能夠省略
    • 3 函數聲明整個函數都會被提高,函數表達式只有變量名被提高
  • 相同點:
    • 除了上述語法不一樣外,其餘用法都相同。

 

 函數參數傳遞方式

// 基本數據類型
function add(num) {
    num = num + 10;
    return num;
}
 
var count = 20;
var result = add(count);
console.log("count的值爲:" + count); // ??
console.log("result的值爲:" + result); // ??
 
// 複雜數據類型
// 1.
function setAge(obj) {
    obj.age = 18;
}
 
var person = new Object();
person.age = 30;
 
setAge(person);
console.log(person.age); // ??
 
// 2.
function setName(obj) {
    obj.name = "小明";
    obj = new Object();
    obj.name = "小紅";
}
 
var person = new Object();
person.name = "Jack";
 
setName(person);
console.log(person.name); // ??
  • JavaScript中全部函數的參數都是按值傳遞的。也就是說,把函數外部的值複製給函數內部的參 數,就和把值從一個變量賦值到另外一個變量同樣。
  • 參數其實是函數的局部變量,那麼這些局部變量(包括:函數參數、函數內部聲明的變量), 在函數執行完畢後會被當即銷燬掉。

 

 

 

 

 

第三部分對象

數據類型

基本數據類型 string number boolean null undefined

複雜數據類型 Object

 

獲取變量的數據類型: typeof 變量名  或者  typeof(變量名)

 

 

基本類型(值類型)在棧中存儲

引用類型的對象在堆中存儲,地址在棧中存儲

 

什麼是對象

對象其實就是一組數據和功能的集合    鍵值對的集合

對象能夠方便地描述和模擬客觀事物

 

 

  • JavaScript中如何建立對象?
// 建立一個對象
var obj = new Object();
// 給對象設置屬性
obj.name = "小明";
obj.age = 18;

2.1 什麼是JavaScript對象

JavaScript中的對象:無序屬性的集合,其屬性能夠包含基本值、對象或者函數。
嚴格來說,這就至關於說對象是一組沒有特定順序的值。對象的每一個屬性或方法都有一個名字,
而每一個名字都映射到一個值。
  • 對象和基本類型的區別:
對象與數字、字符串、布爾值這樣的數據類型不一樣,它們不是表示一個單個的值,而是值的集合。
對象是已命名值的一個集合。
數字、字符串、布爾值是簡單數據類型
對象是複雜數據類型
  • 函數也是對象

 

 

2.2建立對象的兩種方式對比

  • 方式一:使用構造函數建立對象
// 使用 new 操做符,後面跟 Object構造函數調用,來建立對象
// 此時,返回值:obj,就是新建立出來的對象
var obj = new Object();
// 給對象添加屬性
obj.name = "靜靜";
obj.age = 18;
obj.getName = function () {
    return this.name; // 靜靜
};
  • 方式二:使用對象字面量(推薦)
// 語法規則
var person = {
    // 屬性名: 屬性的值
    // 使用逗號來分隔不一樣的屬性(若是當前屬性後面還有其餘屬性的話)
    name: "Nicholas",
    age: 18
};
 
// 建立對象設置屬性
var person = {
    name: "加引號的屬性名稱",
    0: "屬性名爲數值類型,那麼這裏的數值屬性名會自動轉換爲字符串"
};
 
// 建立一個空對象,沒有任何屬性
var person = {};
  • 對象字面量的說明:
    1. 對象字面量是對象定義的一種簡寫形式,目的在於簡化建立包含大量屬性的對象的過程。
    2. 語法規則中,左邊的花括號({)表示對象字面量的開始,由於它出如今了表達式上下文中。
    3. 對象字面量的屬性名,能夠不加引號 也能夠加引號(單引號或者雙引號均可以)

 

 

2.3對象的基本操做

2.3.1 屬性的設置
// 建立一個空對象
var obj = {};
// 使用點運算符(.)來設置屬性的值
obj.name = "這是name屬性的值";
obj.age = 18; // age屬性設置值:18
// 使用方括號[]來設置屬性的值,注意:要訪問的屬性是字符串的形式或者是變量
obj["font-size"] = "30px";
2.3.2 屬性的讀取
// 獲取屬性的兩種方式
console.log(obj.name);
console.log(obj["name"]);
區別:
    1. 均可以用來設置或者獲取對象的屬性。
    2. 方括號([])能夠經過變量來訪問屬性。
    3. 屬性名中包含會致使語法錯誤的字符,或者屬性名使用的是關鍵字和保留字,使用方括號表示法。
       例如:obj["first name"],因爲"first name"中包含一個空格,因此不能使用點表示法來訪問它。
             而後,屬性名中是能夠包含非字母非數字的,這時候就可使用方括號表示法來訪問它們。
    4. 除非必須使用變量來訪問屬性,不然推薦使用點表示法。
2.3.3 屬性的遍歷
  • 如何獲取對象的一個屬性?
  • 若是要獲取對象的全部屬性,怎麼獲取?
    • for-in
var obj = {
    name: "明哥",
    age: 18,
    weight: 50
};
 
for(var ob in obj) {
    // ob 爲屬性名
    // obj[ob] 爲屬性名對應的值
    console.log("屬性 " + ob + " 的值爲:" + obj[ob]);
}

2.4 如何建立自定義對象

  • 1 使用函數,函數名首字母大寫(爲了區分普通函數)(此時的函數叫作:構造函數)
  • 2 使用this關鍵字
function Person(name, age) {
  this.name = name;
  this.age = age;
}
 
var p = new Person("猴哥", 18);
console.log(p.name);
console.log(p.age);
  • new 操做符的做用
    • 1 建立一個對象
    • 2 將構造函數的做用域賦給新對象, 因此this == p
    • 3 執行構造函數,爲對象設置屬性
    • 4 返回新對象
相關文章
相關標籤/搜索