變數宣告與 undefined
變數variable
js 裡寫
var
就是 variableundefined
-->有宣告但沒有賦值所以找不到++a 和 a++ 差別
> a++ && 30 => a && 30 ,再執行 a++
> ++a && 30 => 執行 a++,再 a && 30
變數型態 typeof
- primitive : boolean,number,string
- object,undefined,function
> typeof 12 "number"
陣列 array 的型態是 object
null 的型態是 object
陣列(Array)
box[0]
[0]是索引值,從 0 開始
length是長度,從 1 開始
如果把 length 放在索引裡面,記得 -1 不然會 undefined
因為假設 length 是 5 ,放在索引最後一個是 4 ,自然就 undefined
- 增加陣列新元素
//方法 1
var score = [1,3,5,15,22]
score[score.length]=10000
console.log(score)
< (6) [1, 3, 5, 15, 22, 10000]
//方法 2
score.push(1000)
最直覺的變數型態:物件(Object)
陣列用中括號,物件用大括號
物件(Object)裡面可以放陣列(Array),也可以再放物件(Object)
var students = []
var peter = {
name : 'Peter',
score : [50,60,100],
address : 'taipei',
phone : "0912333444"
father : {
name : 'Nick'
phone : "12345"
}
}
印出 Peter 的分數score
// 方法 1
students.push(Peter)
console.log(students[0].score)
// 方法 2
console.log(peter.score)
// 方法 3
console.log(peter['score'])
// 方法 4
var key = 'score'
console.log(peter[key])
印出 Peter 爸爸 的 name
console.log(peter.father.name)
變數的運算
- 注意型態
var a = 10
var b = 20
console.log(a + b)
< 30
var a = 10
var b = '20'
console.log(a + b)
< 1020
解決辦法 : 轉型態
// 方法 1
var a = 10
var b = '20'
console.log(a + Number(b))
< 30
// 方法 2
console.log(a + parseInt(b,10))
< 30
// b 後面的 10 代表 10 進位
// 如果放 2 就會變 2 進位,假設 b = '10'
// 結果就會是 12
var a = 0.1 + 0.2
console.log(a == 0.3)
< false
// 把 a 印出來會發現 a = 0.30000000000000004
// 可以搜尋 "浮點數誤差"
== 與 ===
- 差別在那 ? 型態 !
===
會多判斷型態
console.log( 0 == '0')
< true
console.log( 0 === '0')
< false
console.log( 0 == ' ')
< true
console.log( 0 == null)
< false
從 Object 的等號真正的理解變數
console.log( [] === [])
< false
console.log( [1] === [1])
< false
console.log( {} === {})
< false
console.log( { a : 1 } === { a : 1 })
< false
因為每個 Object 放的記憶體不一樣,所以不管是 ===
或 ==
結果都會是 false
EX : 我有 Mac 你也有 Mac,都是 Mac 但不會是一樣的東西
怎樣變成 true ?
var obj ={
a:1
}
var obj2 = obj
console.log(obj === obj2)
< true
var obj ={
a:1
}
var obj2 = obj
obj2.a = 2
console.log(obj === obj2)
< true
// 增加 obj2.a = 2 ,結果還是 true
var obj ={
a:1
}
var obj2 = obj
obj2.a = 2
obj2 = { b:2 }
console.log(obj === obj2)
< false