數據類型和引用數據類型

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 語句中的catchwith語句

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小結

 基本類型值在內存中佔據固定大小的空間,因此被保存在棧內存中;
 從一個變量向另一個變量複製基本類型的值,會創建這個值的一個副本;
 引用類型的值是對象,保存在堆內存中;
 包含引用類型值的變量實際上包含的並不是對象本身,而是一個指向該對象的指針;
 從一個變量向另一個變量複製引用類型的值,複製的其實是指針,因此兩個變量最終都指向同一個對象;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章