4.1 基本數據類型和引用數據類型
5種基本數據類型:
Undefined
Null
Boolean
Number
String
1.動態的屬性
var person = new Object();
person.name = "Nicholas";
alert(person.name);//"Nicholas"
但是如果通過下面的方式來創建就不可以動態的訪問屬性
var name = "Nicholas";
name.age = 27;
alert(name.age);//undefined
2.複製變量
var num1 = 5;
var num2 = num1;
這兩個變量可以參與任何操作而不會相互影響。
var obj1 = new Object();
var obj2 = obj1;
obj1.name = "Nicholas";
alert(obj2.name); //"Nicholas"
obj1 和 obj2 都指向同一個對象。
3.傳遞參數
基本類型值的傳遞如同基本類型變量的複製一樣,而引用類型值的傳遞,則如同引用類型變量的複製一樣。
function addTen(num) {
num += 10;
return num;
}
var count = 20;
var result = addTen(count);
alert(count);//20,沒有變化
alert(result);//30
function setName(obj) {
obj.name = "Nicholas";
}
var person = new Object();
setName(person);
alert(person.name);//"Nicholas"
4.檢測類型
typeof 操作符是確定一個變量是字符串、數值、布爾值,還是 undefined 的最佳工具。
var n = null;
var o = new Object();
alert(typeof n); //object
alert(typeof o); //object
想知道它是什麼類型的對象,則通過instanceof方法:
result = variable instanceof constructor
如果變量是給定引用類型(根據它的原型鏈來識別;第 6 章將介紹原型鏈)的實例,那麼instanceof 操作符就會返回 true
4.2 執行環境及作用域
var color = "blue";
function changeColor(){
var anotherColor = "red";
function swapColors(){
var tempColor = anotherColor;
anotherColor = color;
color = tempColor;
// 這裏可以訪問 color、anotherColor 和tempColor
}
// 這裏可以訪問 color 和 anotherColor,但不能訪問tempColor
swapColors();
}
// 這裏只能訪問 color
changeColor();
1.延長作用域鏈
try-catch 語句中的catch塊
with語句
2.沒有塊級作用域
for語句中的變量聲明會將變量添加到當前的執行環境(在這裏是全局環境)中。
for (var i=0; i < 10; i++){
doSomething(i);
}
alert(i); //10
1.聲明變量
function add(num1, num2) {
var sum = num1 + num2;
return sum;
}
var result = add(10, 20); //30
alert(sum);//由於 sum 不是有效的變量,因此會導致錯誤
但是將上面的代碼修改以下
function add(num1, num2) {
sum = num1 + num2;
return sum;
}
var result = add(10, 20); //30
alert(sum);//30
4.3垃圾收集
JavaScript 具有自動垃圾收集機制,找出那些不再繼續使用的變
量,然後釋放其佔用的內存。爲此,垃圾收集器會按照固定的時間間隔(或代碼執行中預定的收集時間),週期性地執行這一操作。
4.4小結
基本類型值在內存中佔據固定大小的空間,因此被保存在棧內存中;
從一個變量向另一個變量複製基本類型的值,會創建這個值的一個副本;
引用類型的值是對象,保存在堆內存中;
包含引用類型值的變量實際上包含的並不是對象本身,而是一個指向該對象的指針;
從一個變量向另一個變量複製引用類型的值,複製的其實是指針,因此兩個變量最終都指向同一個對象;