1. 程式人生 > >JavaScript高階程式設計(第三版)學習筆記(四)JavaScript引用型別

JavaScript高階程式設計(第三版)學習筆記(四)JavaScript引用型別

1、引用型別

引用型別是指封裝了變數和對應函式的結構體,它是例項就是物件,類似於C++、Java中的類,但沒有類的介面等。
建立方式一:

var obj = new Object();//new關鍵字 + 建構函式
obj.name = "noodles";//用.新增屬性名
obj.age = 36;
alert(obj.name+","+obj.age);

建立方式二(字面量):

var obj = {//在表示式上下文用中括號{表示開始
    name:"noodles",//用名值對方式 屬性名與數值之間為: 不同名用逗號分隔
    "age":28//屬性名預設為字串
}
alert(obj.name+","+obj.age + "," +obj.sex);//obj.sex返回undefined

區別:第二種寫法程式碼量更少,而且用作函式實參時,提高可讀性。

function print(person){
var str = "";
    if( typeof person.name == "string"){
        str = str + "name=" + person.name;
    };
    if(typeof person.age == "number"){
        str = str + ",age=" + person.age;
    };
    alert(str);
}
print({name:"noodles",age:18});
print({name:"jack"});

前者主要用於定義確定的屬性名,後者用於定義不固定的屬性名。
備註:用typeof跟數值/變數可以檢測具體資料型別,但不同引用型別物件,返回呼叫都是Object,並沒有太大意義,所以一般用instanceof操作符,前面為數值/變數+instanceof+後面引用型別,判斷後面的引用型別是否為前者的原型,如:

var obj = new Object();
alert(obj instanceof Object);//true

2、賦值

基本型別:實際數值
引用型別:指標(可以看做物件地址)。

3、作用域

程式碼執行時,變數有其它的作用域,一方面搜尋變數(識別符號)時先在最近的作用域查詢,查詢不到再去父作用域,這樣提高了搜尋效率;另外當執行工作離開變數最近作用域就被視為無效,記憶體會被回收,從而提高程式效能。
作用域分為:全域性作用域(window物件)和函式作用域,程式碼塊是沒有作用域的,比如:

if(true){
  var a = 3;
}
alert(a);//3

function f(){
    var b = 3;
}
alert(b);//語法錯誤

作用域關係就像棧(入口朝下),執行時,首選全域性作用域入棧,如果呼叫函式,則依次進棧,下面作用域可以(從下到上)依次呼叫上面作用域的變數,但上面作用域不能呼叫下面作用域的變數。

4、記憶體回收

程式自動回收,無需手動處理。
兩種方式:
1、標記清除:標記為可清除,則回收變數。
2、引用計數:引用數為0,則回收變數。
第2種存在迴圈引用的情況,如

var obj1 = new Object();
var obj2 = new Object()
obj1.element1 = obj2;
obj2.element2 = obj1;

類似死鎖的方式,則變數無法被回收。
處理方式:因為在函式作用域內變數在函式執行結束時會被銷燬,所以無需手動處理,但全域性變數為了避免迴圈引用,則把不用的引用型別變數賦值為null,如

obj1 = null;
obj2 = null;

這樣則系統會定時進行記憶體回收。

相關推薦

JavaScript高階程式設計()》讀書筆記

《JavaScript高階程式設計(第三版)》讀書筆記 本文內容是關於《JavaScriptt高階程式設計(第三版)》的讀書筆記,而且只是提取個人認為每個章節比較重要或者需要注意的知識點。 第一章   JavaScript簡介 1.      一個完整的JavaScipt

JavaScript高階程式設計學習筆記JavaScript引用型別

1、引用型別 引用型別是指封裝了變數和對應函式的結構體,它是例項就是物件,類似於C++、Java中的類,但沒有類的介面等。 建立方式一: var obj = new Object();//new關鍵字 + 建構函式 obj.name = "noodles"

JavaScript高階程式設計學習筆記JavaScript使用

JavaScript設計初衷就是能在Web瀏覽器中直接執行的指令碼語言,當然迫切想知道它是怎麼使用的? Web瀏覽器上執行的內容就是上篇提到過HTML檔案,由XML衍生出來的超文字標記語言,由標籤和內容組成,為了能夠讓JavaScript更好的與HTML融合使

UNIX環境高階程式設計 五章筆記

5.2 流和物件 只有兩個函式可以改變流的定向: freopen函式清楚一個流的定向,fwide函式可用於設定一個流的定向。 #include <stdio.h> #include <wchar.h> int fwide(FILE

unix環境高階程式設計-讀書筆記2

限制 unix系統實現定義了很多幻數和常量,其中有很多已被硬編碼到程式中,或用特定的技術確定。 已下兩種型別是必須的。 (1)編譯時限制(例如,短整型的最大值是什麼?) (2)執行時限制(例如,檔名有多少個字串?) 編譯時限制可在標頭檔案中定義。程式在編譯時包含這些標頭檔案。但是執行

1012 - C語言程式設計教程課後習題6.2

1012 - C語言程式設計教程(第三版)課後習題6.2 時間限制:1秒 記憶體限制:128兆 題目描述 輸入一行字元,分別統計出其中英文字母、空格、數字和其他字元的個數。 輸入 一行字元 輸出 統計值 樣例輸入 aklsjflj123 sadf918u324 asdf91u32oa

1011 - C語言程式設計教程課後習題6.1

1011 - C語言程式設計教程(第三版)課後習題6.1 時間限制:1秒 記憶體限制:128兆 題目描述 輸入兩個正整數m和n,求其最大公約數和最小公倍數。 輸入 兩個整數 輸出 最大公約數,最小公倍數 樣例輸入 5 7 樣例輸出 1 35 最大公約數求法我是用的是輾轉相除法進行

1010 - C語言程式設計教程課後習題5.8

1010 - C語言程式設計教程(第三版)課後習題5.8 時間限制:1秒 記憶體限制:128兆 題目描述 企業發放的獎金根據利潤提成。利潤低於或等於100000元的,獎金可提10%; 利潤高於100000元,低於200000元(100000<I≤200000)時,低於100000元的部

1047 - C語言程式設計教程課後習題10.5

1047 - C語言程式設計教程(第三版)課後習題10.5 時間限制:1秒 記憶體限制:128兆 題目描述 有n人圍成一圈,順序排號。從第1個人開始報數(從1到3報數),凡報到3的人退出圈子,問最後留下的是原來的第幾號的那位。 輸入 初始人數n 輸出 最後一人的初始編號 樣例輸入

1022 - C語言程式設計教程課後習題7.1

1022 - C語言程式設計教程(第三版)課後習題7.1 時間限制:1秒 記憶體限制:128兆 題目描述 用篩法求之N內的素數。 輸入 N 輸出 0~N的素數 樣例輸入 100 樣例輸出 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

1008 - C語言程式設計教程課後習題5.6

1008 - C語言程式設計教程(第三版)課後習題5.6 時間限制:1秒 記憶體限制:128兆 題目描述 給出一百分制成績,要求輸出成績等級‘A’、‘B’、‘C’、‘D’、‘E’。 90分以上為A 80-89分為B 70-79分為C 60-69分為D 60分以下為E 輸入 一個整數0

1007 - C語言程式設計教程課後習題5.5

007 - C語言程式設計教程(第三版)課後習題5.5 時間限制:1秒 記憶體限制:128兆 描述 有一個函式 y={ x x<1 | 2x-1 1<=x<10 \ 3x-11 x>=10 寫一段程式,輸入x,輸出y 輸入 一個數x 輸出 一個數y 樣例輸

1006 - C語言程式設計教程課後習題5.4

1006 - C語言程式設計教程(第三版)課後習題5.4 時間限制:1秒 記憶體限制:128兆 描述 有三個整數a b c,由鍵盤輸入,輸出其中的最大的數。 輸入 一行陣列,分別為a b c 輸出 a b c其中最大的數 樣例輸入 10 20 30 樣例輸出 30 提示 max ?

1005 - C語言程式設計教程課後習題4.9

1005 - C語言程式設計教程(第三版)課後習題4.9 時間限制:1秒 記憶體限制:128兆 題目描述 輸入一個華氏溫度,要求輸出攝氏溫度。公式為 c=5(F-32)/9 輸出要求有文字說明,取位2小數。 輸入 一個華氏溫度,浮點數 輸出 攝氏溫度,浮點兩位小數 樣例輸入 -4

1003 - C語言程式設計教程課後習題3.7

1003 - C語言程式設計教程(第三版)課後習題3.7 時間限制:1秒 記憶體限制:128兆 提交 題目描述 要將"China"譯成密碼,譯碼規律是:用原來字母后面的第4個字母代替原來的字母.例如,字母"A"後面第4個字母是"E".“E"代替"A”。因此,“China"應譯

1002 - C語言程式設計教程課後習題1.6

1002 - C語言程式設計教程(第三版)課後習題1.6 時間限制:1秒 記憶體限制:128兆 題目描述 編寫一個程式,輸入a、b、c三個值,輸出其中最大值。 輸入 一行陣列,分別為a b c 輸出 a b c其中最大的數 樣例輸入 10 20 30 樣例輸出

1014 - C語言程式設計教程課後習題6.4

1014 - C語言程式設計教程(第三版)課後習題6.4 時間限制:1秒 記憶體限制:128兆 題目描述 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一個數字。 輸入 n 輸出 和 樣例輸入 5 樣例輸出 153 題求一個數的階乘和,本身並不是一個難想的思路,

《Java程式設計規範》James.Gosling等.掃描.pdf

書籍簡介: 本書由java技術的發明者編寫,是java tm程式語言的權威性技術指南。如果你想知道語言之構造的精確含義,本書是最好的資源。.   本書全面、準確而詳細地論及了java程式語言。它提供了對於自前一版以來新增的所有新特性的完整描述,包括泛型、註釋、斷言、自動裝箱、列舉、for-

1015 - C語言程式設計教程課後習題6.5

1015 - C語言程式設計教程(第三版)課後習題6.5 時間限制:1秒 記憶體限制:128兆 題目描述 求以下三數的和,保留2位小數 1~a之和 1~b的平方和 1~c的倒數和 輸入 a b c 輸出 1+2+…+a + 1 ^ 2 + 2 ^ 2+…+b ^ 2 + 1/1+1/2+…+

1013 - C語言程式設計教程課後習題6.3

1013 - C語言程式設計教程(第三版)課後習題6.3 時間限制:1秒 記憶體限制:128兆 題目描述 求Sn=2+22+222+…+22…222(有n個2)之值,其中a是一個數字。 例如:2+22+222+2222+22222(n=5),n由鍵盤輸入。 輸入 n 輸出 Sn 樣例輸入