知識點
- 變量類型
- 變量計算
- 傳遞參數
變量類型
- 基本類型 VS 引用類型
- typeof運算符詳解
基本類型
Number/String/Boolean/undefined/null
基本類型的值在內存中佔據固定大小的空間,因此被保存在堆內存中。
var a = 100
var b = a
a = 200
console.log(b) // 200
引用類型
Object/Array/Function
引用類型是保存在內存中的對象,其指針指向同一個內存,原因是其可以無限制擴展屬性,爲了防止消耗過大內存。操作對象時實際是在操作對象的引用而不是實際的對象。
var a = {age:200}
var b = a
b = {age:100}
console.log(a.age) // 100
變量計算-強制類型轉換
- 字符串拼接
==
運算符if
語句- 邏輯運算
var a = 100 + 10 // 110
var b = 100 + '10' // '10010'
// == 會將數據轉換某一基本類型
100 == '100' // true
0 == '' // true
null == undefined // true
// if會將數據轉換爲Boolean
var a = true, b = 100, c = ''
if (a) {} // true
if (b) {} // true
if (c) {} // false
console.log(10 && 0) // 0,10被轉爲了true
console.log('' || 'abc') // 'abc',''被轉爲了false
console.log(!window.abc) // true,undefined被轉爲了false
// 判斷一個變量會被當成true還是false
var a = 100
console.log(!!a)
傳遞參數
ECMAScript中所有函數的參數都是按值傳遞的,就如同複製變量。
但向函數傳遞引用類型的值時,會將其在內存中的地址複製給函數中的局部變量,因此這個局部變量的變化會反映在函數的外部,而基本類型傳參則不會反映到函數外部。
// 基本類型傳參
function addTen(num){
num += 10
return num
}
var count = 20
var result = addTen(count)
alert(count) // 20,沒有變化
alert(result) // 30
// 引用類型傳參
fucntion setName(obj){
obj.name = 'David'
}
var person = new Object()
setName(person)
alert(person.name) // 'David'