變數、函式、類別命名
變數與函式,都用小駝峰式(camelCase)的命名。 類別用巴斯卡(PascalCase)或大駝峰式命名法(CamelCase)命名:
let numberOfStudents
const numberOfLegs
function setBackgroundColor()
class Student{}
//不用 _ 的命名方式
const NAMES_LIKE_THIS='Hello'
資料類型(值)
JavaScript中有6種原始的原始資料類型(Primitive Data Type),分別是 數字(Number) 字串(String) 布林(Boolean) 特殊的原始資料類型: 空(null)=>有名稱,但沒有值 未定義(undefined)=>連名稱都沒有定義 符號(Symbol)
複合型(composite)或參考型(reference)的資料類型: 陣列(Array) 物件(Object)
函數不算資料
"falsy"包含了0, -0, null, NaN, undefined, 空白字串(''),當然也一定包含了false值
JavaScript是一個鬆散資料類型(loosely typed)的程式語言。你不需要為變數/常數在定義時,就規定要使用哪一種的資料類型。只需要指定它的值,JavaScript會依照你所指定的值決定變數/常數的資料類型。
那麼要如何判斷目前變數/常數的資料類型?最簡單的方式就是使用這個運算符typeof
console.log(typeof 37) //'number'
整數的進位(少用到)
//8進位
const octalNumber = parseInt('071', 8)
//2進位
const binaryNumber = parseInt('0111', 2)
//16進位
const hexNumber = parseInt('0xFF', 16)
整數轉浮點數
const myString = (3).toFixed(2) //string, 3.00
雙位元反相運算(Double Bitwise NOT)(~~)
真正功用是轉換其他類型為整數
console.log(~~true) // 1
console.log(~~false) // 0
console.log(~~null) // 0
console.log(~~undefined) // 0
雙驚嘆號(!!)
轉換後形成布林值的情況值
const aBool = !!0 //false
const bBool = !!'false' //true
const cBool = !!NaN //false
數字的精確問題
在處理浮點數時,要格外小心,javascript要先轉為整數再運算。
注意: 第二行的值失去精確,它會變成另一個值
console.log(999999999999999)
console.log(9999999999999999)
注意: x, y都不是你想的結果
const x = 0.2 + 0.1
const y = 0.3 - 0.1
樣版字串
對於JavaScript語言來說,使用雙引號標記("")與單引號標記('')來定義字串值,結果都是完全一樣的。 若要在字串內加入變數/常數,要用樣版字串。
const firstName = 'Eddy'
console.log(`Hello ${firstName}!
Do you want some
rabbits tonight?`)
const x = 5
console.log(`5 + 3= ${x + 3}`)
字串與字元
存取一個字串中的單一個字元,可以用類似陣列的存取方式
const b = 'cat'[1] // 'a'
與其他類型作加號(+)運算
const a = '10' + 1
console.log(a) //101
const b = 10 + '1'
console.log(b) //101
indexOf() 字串搜尋(返回索引值)
如果尋找不到該子字串,則會回傳-1
const aString = 'Apple Mongo Banana'
console.log( aString.indexOf('Apple') ) // 0
console.log( aString.indexOf('Mongo') ) // 6
console.log( aString.indexOf('Banana') ) // 12
console.log( aString.indexOf('Honey') ) // -1
slice()、splice()、split()、join() 用法說明
splice(): 增加或刪除陣列中指定 index 的值
取出子字串
substring(不能用負值)
語法: str.substring(start[, end])
slice(字串陣列皆可用)
語法: str.slice(start[, end])
//字串
const aString = '0123456789'
console.log(aString.slice(0, 3)) //012
console.log(aString.slice(5, 8)) //567
console.log(aString.slice(4, 4)) //''
console.log(aString.slice(5)) //56789
console.log(aString.slice(5, 2)) //''
console.log(aString.slice(5, 20)) //56789
console.log(aString.slice(-5, 2)) //''
console.log(aString.slice(2, -5)) //234
console.log(aString.slice(-5, -5)) //''
//陣列
const aArray = [1, 2, 3, 4, 5, 6]
const bArray = aArray.slice(1, 3)
const cArray = aArray.slice(0)
const dArray = aArray.slice(-1, -3)
const eArray = aArray.slice(-3, -1)
const fArray = aArray.slice(1, -3)
substr(非標準用法,只有某些瀏覽器可用)
短路求值
實際上JavaScript中,在經過邏輯與(&&)與邏輯或(||)的運算後,它的回傳值是 - 最後的值(Last value),並不是像在常見的Java、C++、PHP程式語言中的是布林值。
&& 要二邊都是true才是 true,其它都是 false
|| 只要二邊有一個是 true 就是 true
// true 和 false 判斷與其它程式相同
console.log(true && false) //false
console.log(true || false) //true
// 當是值或判斷式時,javascript 不當成 true 或 flase
// 而是真的會執行並返回原值
console.log('foo' && 'bar') // 'bar'
console.log('foo' || 'bar') // 'foo'
console.log(false || 'bar') // 'bar'