變數常數資料類型

變數、函式、類別命名

變數與函式,都用小駝峰式(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'
  • 數字轉字串 typeof(15+'')

  • 字串轉數字 typeof('15'-0)

整數的進位(少用到)

//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() 用法說明

  • slice(): 截取陣列或字串的部份

  • splice(): 增加或刪除陣列中指定 index 的值

  • split(): 提供分隔符號,將字串轉換為陣列

  • join(): 提供分隔符號,將陣列改為字串

取出子字串

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'

Last updated