6. JavaScript 型別 - ZoeHYH/mentor-program-4th GitHub Wiki
屬性 Property 與 方法 Method
只有物件型別有屬性與方法,原始型別在調用屬性與方法時,會自動轉換成 Primitive Wrapper Objects ,存取完再自動刪除。
弱型別語言
宣告變數時不需要宣告型別,但執行跨型別的運算時會自動轉換型別。
console.log(數字+字串) //字串
原始型別 Primitive Type
console.log(Object.prototype.toString.call(變數)) //更準確的變數型別
console.log(typeof true) // boolean
console.log(typeof null) // object ,發明時就這麼設計
//空值的物件?等同 0 、 "" ?
console.log(typeof undefined) // undefined
console.log(typeof Symbol()) // symbol
不可改變 Immutable
var a = 1, b = a
b++
console.log(a) // 1
數字 Number
console.log(typeof 30) // number
數字+='' //字串
-
浮點數誤差:電腦無法精準儲存小數。
var a = 0.2 + 0.1 console.log(a) // 0.30000000000000004 console.log(a == 0.3) // false
-
數字相關的內建函式
Number(字串) //轉換成數字 parseInt(字串[, 進位方式 Radix]) //忽略小數,最大三十六進位,默認十進位 parseFloat(字串) //字元無法轉換就回傳已轉換的值,第一個字元無法轉換回傳 NaN
-
方法
數字.toFixed([到小數點前幾位]) //四捨五入,傳回字串 數字.toString([進位方式 Radix])
-
屬性
數字.MAX_VALUE //能儲存的最大數值超過回傳 Infinity
-
內建物件 Math 的方法
Math.ceil(數字) //無條件進位成整數 Math.floor(數字) //無條件捨去成整數 Math.round(數字) //四捨五入成整數 Math.sqrt(數字) //開根號 Math.pow(基數 base , 指數 exponent) //次方結果 Math.random() //產生 0~1 的隨機小數,實務上會乘一個數字再無條件捨去
-
內建物件 Math 的屬性
Math.PI //圓周率
字串
console.log(typeof 'hello') // string
'J' >= 'A' && 'J' <= 'Z' // true ,可以判斷大小寫
字串[序號] //可以用 [] 存取
-
方法
字串.indexOf('尋找字串') //回傳字串起始序號,從 0 起算,不存在回傳 -1 字串.replace('尋找字串','取代字串') //可結合正規表示法尋找 字串.split('字串') //字串陣列中不會有作為分隔符號的字串 字串.trim() //取代空格 字串.toUpperCase() //大寫 字串.toLowerCase() //小寫 字串.charCodeAt(第幾字元) //從 0 起算,轉 ASCII 編碼
-
字串相關的內建函式
String.fromCharCode(編碼) //編碼轉
-
屬性
字串.length
-
跳脫字元:讓電腦視特殊符號為純字串
\ //跳脫字元 console.log("\"") // "
-
控制字元
\n // newline ,另起一行 \r // carriage return ,回到開頭輸入 \t // Tab \b // word boundary ,退一格輸入 \f // form feed ,新一頁
物件型別 Non-Primitive Type
可改變 Mutable
記憶體內容可改變。
console.log([] === []) // false ,記憶體位置不同
console.log({} === {}) // false ,記憶體位置不同
var a = [], b = a
b.push(1)
console.log(a) // 1
物件 Object - 陣列 Array
許多個有序號的同性質資料箱子,大部分語言的序號從 0 開始。
console.log(typeof [1]) // object ,即陣列 Array
var 陣列名稱 = [值, 值, 值]
console.log(陣列[序號]) //取出值的方法
var 陣列 = []
for (var i=0; i<n; i++) { //建立 n*n 二維陣列
陣列[i] = []
for (var j=0; j<n; j++) {
陣列[i].push(j)
}
}
-
方法-傳出新陣列,可以結合使用
陣列.join([值]) //用值或默認的 , 連接合併字串 陣列.map(函式或函式表達式) //運算完成元素的新陣列 陣列.filter(函式或函式表達式) //只含結果為 true 元素的新陣列 陣列.slice(序號, 序號) //從開始到結尾序號前元素的新陣列 陣列.splice(序號, 刪除幾個元素, 插入元素) //修改原陣列
-
方法-傳出值
陣列.indexof(值,[起始索引值]) //回傳找到的索引或 -1 ,索引值 -1 代表最後一個,但不影響尋找順序
-
方法-原地改變原陣列
陣列.push(值) //把值放到最後面,並回傳新長度 陣列.unshift(值) //把值加到最前面,並回傳新長度 陣列.pop() //去除並回傳最後一個元素 陣列.shift() //去除並回傳第一個元素 陣列.reverse() //反轉陣列 陣列.sort([函式]) //原地排序(無輔助變數),默認根據 Unicode 編碼位置值排序 //函式回傳 0 不變, >0 則 b,a , <0 則 a,b 陣列.sort((a, b) => a-b) //讓數字依大小升冪排序 陣列.sort((a, b) => b-a) //讓數字依大小降冪排序 陣列.sort((a, b) => a.key-b.key) //取字典的數字資料值排序 陣列.sort((a, b) => a.toUpperCase() < b.toUpperCase() ? -1 : a.toUpperCase() > b.toUpperCase() ? 1 : 0) //字串忽略大小寫排序 陣列.sort((a, b) => a.key.toUpperCase() < b.key.toUpperCase() ? -1 : a.key.toUpperCase() > b.key.toUpperCase() ? 1 : 0) //取字典的字串資料值忽略大小寫排序
物件 Object
儲存多種資料。
console.log(typeof {a: 1}) // object ,就像字典
var 物件名稱 = {
key: value, // value ,也就是值,可以是各種型別
key: value
}
console.log(物件.key) //點記法 Dot notation 取值
console.log(物件["key"]) //括弧記法 Bracket notation 取值,因此物件也叫相聯陣列 Assciative array
- 方法
物件.hasOwnProperty(值) //物件中存在此元素就回傳布林值
- 函式
函式 Function
可重複使用的程式碼區塊。
console.log(typeof function) // function
調用 Invole
-
引數
Argument
:每一次調用時傳遞值給參數的變數,不是傳址。函式(函式(引數)) //函式本身也可以做為引數傳遞
函式宣告 Function Declation
-
參數
Parameter
:宣告時的變數,不可命名為arguments
,切勿在函式內變更、重新賦值。 -
物件
arguments
:函式範疇的類陣列的物件 Array-Like Objects ,儲存所有賦給Peremeter
的值,以陣列方式存取值,不具length
以外的陣列屬性方法,箭頭函式沒有這個物件。 -
return
:視需求使用return 變數 //為 statement ,會跳出 function return Expression return { // 要在同行,否則電腦會自動中斷 物件 } return // 或沒有 return 也會 undefined
-
函式陳述句 Function Statement
函式(引數) //提升 Hoisting function 函式名稱(參數) { //用來傳遞值的變數 Statement }
-
函式表達式 Function Expression
-
把函式賦值給某個變數
函式(引數) //宣告時用 const 或 let 就不會被提升 var 函式名稱 = function (參數) { //可以省略 Statement }
-
放在要使用的地方
function 傳遞引數的函式{} console.log( 傳遞引數的函式(引數 ,function (參數){ Statement }) )
-
匿名函式 Anonymous Function:直接執行就不用命名
-
-
箭頭函式 Arrow Function Expression
(參數, 參數) => { //參數只有一個時可以省略 () Statement return Expression } 參數 => Expression //省略 {} 時可省略 return () => {} //沒有參數,不回傳值