JavaScript

Day13 物件與物件實體

今天我們來看物件實體語法object literals JS可以透過new Object()來建立物件,但開發時相對少見這種寫法。 這是因為JS還有另一種更快建立物件的方法,就是物件實體語法object literals。 什麼是物件實體語法呢? 來看看以下程式碼: var Batman = {}; 用一對大括號{}快速建立物件,大家最常用的就是這種寫法(我也是)。 這種寫法的好處在於可以同時建立屬性和方法: var Batman = { firstname: 'Bruce', lastname: 'Wayne' }; 使用物件實體語法和這種寫法 var Batman = new Object(); Batman['firstname'] = 'Bruce'; Batman['lastname'] = 'Wayne'; 兩者其實是一樣的 物件實體語法的好處在於可以快速、直觀的建立物件、
SimonAllen

Day12 物件與點

今天開始進入第四章節,物件與函式的部分囉。 第二天的筆記有提到,物件是一群名稱/值的組合 例如: { rice: '米飯', soup: '海鮮濃湯' } 而其值可以是另一個名稱/值的組合,也可以是數值、字串、布林、物件、函式....等等。 例如: { rice: '米飯', soup: { seafood: '蝦子', hot: true, cook: function(){ console.log('海鮮濃湯'); } } } 關於物件還有幾件事: * 物件可以有個原始的設定,又稱屬性Properties。 * 物件可以連結至另一個物件(物件裡包含著物件),這個被連結的物件也是屬性。 * 物件裡可以有函式,當函式在物件裡,稱為方法Methods,
SimonAllen

Day11 設定函式內的預設值

今天筆記是昨天內容的衍生 開發者用JS程式呼叫函式時,傳參數進去處理是很常見的方式,如果呼叫時沒有帶入參數,會發生什麼事呢? 來看看以下程式碼: function greet(name){ console.log('Hello ' + name); } greet() 結果是: 發生了什麼事? 我們沒有帶值進去,JS在呼叫函式時也沒報錯,因為傳入的值在呼叫階段被設定進記憶體,但我們什麼都沒有傳,所以JS把這個空的東西,在記憶體被設定成undefined並傳入。 當undefined與字串相加時被轉型成字串'undefined',自然印出'Hello undefined'囉! 但是這並不符合開發者預期的狀況,有沒有辦法讓我們呼叫函式,在未帶入值的時後,函式內有個預設值存在嗎? 這個時候可以使用昨天筆記的方法。 function greet(name){ name = name || '<Your name here>
SimonAllen

Day10 存在與布林

今天來看存在existence與布林boolean的關係 由於JS常發生型別轉換這件事,開發者可以用Boolean()這個內件函式,來判斷型別轉為boolean的結果。 undefined、null、""這些代表沒有的值,都會被被型轉成false。 開發者可以利用此特性,用if()敘述來判斷是否成功取值。 例如: var a; if(a){ console.log('這裡有東西'); } 結果什麼也沒發生,也沒有語法錯誤,發生了什麼事? 我們都知道宣告變數,變數預設值是undefined。 而if()敘述句()內看的是布林值true或false,來決定敘述句{}裏頭的程式碼要不要執行。 故a在if()敘述句被型轉為false,所以這個條件判斷內的程式碼不執行。 如果是有值的狀況,例如: var a = 'IT鐵人賽'; if(a){ console.log('這裡有東西&
SimonAllen

Day09 強制型轉與比較運算子

今天我們來看看強制型轉與比較運算子 JavaScript是動態型別Dynamic Typing語言,故非常容易發生強制型轉這件事。 強制型轉Coercion,JavaScript自動轉換值的型別。 例如說: var a = 1 + 2; console.log(a) 結果是3,合理! 那這樣呢? var a = 1 + '2'; console.log(a) 發生了什麼事? 這裡我們可以用typeof()這個內建函式來查看一下a現在的型別 string(字串) 對JS而言,當數值與字串相加時,它會將數值自動轉型為字串,所以1變成'1'。 實際執行可以想像變成: var a = '1' + '2'; 字串'1&
SimonAllen

Day08 運算子的優先性

今天繼續來看運算子,昨天提到:運算子可以想成是一個函式,這個函式會將前後兩個參數,傳入對應的JS內建函式中,進行運算並回傳。 那是什麼決定運算子的執行順序呢? 這就看運算子的兩個特性,優先性與相依性來決定。 優先性 表示哪一個運算子被優先運算,當同一行程式有不只一個運算子時,具高優先性的運算子會先計算,然後依序算到排序等級低的運算子。 原來運算子也有分社會階級 相依性 表示運算子被計算的順序,若是左到右計算的運算子就稱為左相依性,右到左則稱為右相依性。 若運算子的優先性都相同,那就是依據相依性來判斷順序,決定是左到右還是右到左運算。 來看看以下程式碼: var a = 3 + 4 * 5; console.log(a) 現在有+和* 兩個運算子透過=賦值給a JavaScript會先執行哪一個呢? 在JavaScript中,*運算子優先性比+還高(先乘除後加減),所以會等於23,輸出結果看看: 一般常見的運算子如+-*/(加減乘除)與物件的.運算子都是左相依性的。 那有沒有右相依性的運算子呢? 有的! 例如我們
SimonAllen

Day07 型別與運算子

今天開始,課程影片進入第三章節囉! JavaScript是動態型別Dynamic Typing語言,相較於C#、JAVA之類的靜態型別語言,JS的變數不用在編輯時特意宣告型別(例如布林值、字串、數值..等等),在執行時它就會自動判別。 而說起型別,JS有6種純值Primitive Types,(又稱原始型別、基本型別),「純值」是什麼意思呢? 純值是指一種資料的型別(型態),換句話說,純值(基本型別)不是物件,因為物件就是名稱/值配對的組合物,為避免與口語上的'值'搞混,下面純值改稱呼原始型別或基本型別。 這6種基本型別分別是: undefined 表示未定義,是JS給所有變數的初始值,剛宣告的變數在我們賦值之前,其值是 undefined,所以開發者最好不要賦值undefined給變數。 null 表示空、不存在,開發者在宣告變數並要先表示這個變數沒有值時,可以賦值null,不要手動賦值為 undefined。 另外,JS的null有一點特別的地方,
SimonAllen