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 樣例輸入