1. 程式人生 > >《JavaScript權威指南(第六版)》知識點總結(一)

《JavaScript權威指南(第六版)》知識點總結(一)

第三章 型別、值和變數

        JS的資料型別分為:原始型別、物件型別。

        原始型別:數字、字串、布林值。

        普通物件是“命名值”的無序集合,陣列是帶編號的值的有序集合。函式是具有與它相關聯的可執行程式碼的物件,通過呼叫函式來執行可執行程式碼,並返回結果。

        如果函式用來初始化(使用 new 運算子)一個新建的物件,我們稱之為建構函式(constructor)。每個建構函式定義了一個類(class)物件,類可以看做是物件型別的子型別。

        除了陣列類和函式類之外,JS定義了其他三種有用的類。日期(Date)類、正則(RegExp)類和錯誤(Error)類。

     3.4 null 和 undefined

        typeof null                      // object

        typeof undefined          // undefined

        null 與 undefined 不包括任何屬性和方法

        3.6 包裝物件

        字串也有同樣的屬性和方法:

var s = 'hello world!';
var word = s.substring(s.indexOf(' ') + 1, s.length);<pre name="code" class="javascript">var s = 'hello';
s.toUpperCase();
s                 //'hello',原始字串的值並未改變
        只要引用了字串s的屬性,JS就會將字串通過呼叫 new String (s) 的方式轉換成物件,這個物件繼承了字串的方法,並被用來處理屬性的引用。一旦屬性引用結束,這個新物件就會銷燬。

        同字串一樣,數字和布林值也具有各自的方法。

var s = 'test';
s.len = 4;
var t = s.len;

alert(t);
        上例中,t 是undefined。

        存取字串、數字或布林值的屬性時建立的臨時物件稱做包裝物件。

        3.7 不可變的原始值和可變的物件引用

var s = 'hello';
s.toUpperCase();
s                 //'hello',原始字串的值並未改變

var o = {x: 1};
o.x = 2;
o.y = 3;

var a = [1, 2, 3];
a[0] = 0;
a[3] = 4;         //物件與字串可以修改的
        物件的比較並非值的比較,即使兩個物件包含相同的屬性及相同的值,它們也是不相等的。各個索引元素完全相等的兩個陣列也不相等。

        我們通常將物件稱為引用型別,以此來和JS的基本型別區分開來。物件的比較均是引用的比較,當且僅當它們引用同一個基物件時,它們才相等。

var a = [];
var b = a;
b[0] = 1;
a[0]              //1
a === b;          //true,因為a和b引用同一個陣列
var a = ['a', 'b', 'c'];
var b = [];

for (var i = 0; i < a.length; i++) {
  b[i] = a[i];
}
        上例的 a 與 b 不相等,因為是兩個陣列。下面的函式可以比較兩個陣列的內容是否相同。
function equalArrays(a, b) {
  if (a.length !== b.length) {
    return false;
  }
  for (var i = 0; i < a.length; i++) {
    if (a[i] !== b[i]) {
      return false;
    }
  }
  return true;
}

        3.8 型別轉換

        3.8.2 顯示型別轉換

Number('3');           //3
String(false);         //false 或使用 false.toString()
Boolean([]);           //true
Object(3);             //new Number(3)

        JS中某些運算子會做隱式的型別轉換

x + ''             //String(x)
+x                 //Number(x),也可以寫成 x-0
!!x                //Boolean(x),注意是雙歎號

        Number類定義的 toString () 方法可以接收表示轉換基數的可選引數,如果不指定此引數,轉換將基於十進位制。

        Number型別定義的 toFixed () 方法中的引數為保留小數位數,toExponential () 方法中的引數為科學計數法保留小數的位數,toPrecision () 方法中的引數是有效數字的位數。

        全域性函式 parseInt () 與parseFloat () 可解析整數與浮點數,parseInt () 還可以將基數作為第二個引數。

var a = parseInt('077 blind mice', 8);       //63
var b = parseInt('0.7 kilo');                //0
var c = parseInt('.7 kilo');                 //NaN
var d = parseFloat('.7 kilo');               //0.7

        3.8.3 物件轉換為原始值

        物件到布林值的轉換非常簡單:所有的物件(包括陣列和函式)都轉換為 true。對於包裝物件亦是如此:new Boolean(false)是一個物件而不是原始值,它將轉換為 true。

({x: 1, y: 2}).toString()                 //'[object Object]'
[1, 2, 3].toString()                      //'1,2,3'
(function (x) { f(x); }).toString()       //'(function (x) { f(x); }).toString()'
/\d+/g.toString()                         //'/\\d+/g',注意轉義符
new Date(2010.0.1).toString()             //'Fri Jan 01 2010 00:00:00 GMT-0800 (PST)'

        另一個轉換物件的函式是valueOf () ,如果存在任意原始值,它就預設將物件轉換為表示它的原始值。物件是複合值,而且大多數無法真正表示為一個原始值,因此預設的 valueOf () 方法簡單地返回物件本身,而不是返回一個原始值。陣列、函式和正則表示式簡單地繼承了這個預設方法。日期類定義的 valueOf () 方法會返回一個內部表示:1970年1月1日以來的毫秒數。

        3.10.1 函式作用域和宣告提前

var scope = 'global';
function f() {
  console.log(scope);      //undefined
  var scope = 'local';
  console.log(scope);      //local
}

     3.10.2 作為屬性的變數

var truevar = 1;           //宣告一個不可刪除的全域性變數
fakevar = 2;               //建立全域性物件的一個可刪除的屬性
this.fakevar2 = 3;         //同上
delete truevar;            //false
delete fakevar;            //true
delete this.fakevar2;      //true

        3.10.3 作用域鏈

相關推薦

JavaScript權威指南 初讀筆記-對象

avi uid pre class bsp guide ini ole blog 1 var book = { 2 "main title": "JavaScript", // 屬性名字裏有空格,必須用字符串表示 3 "su

JavaScript權威指南-7章 陣列

陣列 一.建立陣列 1.定義:陣列是值得有序集合。每個值叫做一個元素,而每個元素在陣列中有一個位置,以數字表示——索引 陣列的元素可以是任意型別,並且同一個陣列中的不同元素也可能有不同的型別。第一個元素的索引是0,陣列是js物件的特殊形式。 陣列繼承自Array.prototyp

JavaScript權威指南知識點總結

第三章 型別、值和變數         JS的資料型別分為:原始型別、物件型別。         原始型別:數字、字串、布林值。         普通物件是“命名值”的無序集合,陣列是帶編號的值的有序集合。函式是具有與它相關聯的可執行程式碼的物件,通過呼叫函式來執行可執行程

微型計算機原理復習姚向華編著

通過 物理 部件 con 現場 inter isp 多少 不同 微型計算機原理復習(第六版)姚向華編著(轉載請註明出處) 第一章P37 05. 設機器字長為8位,最高位為符號位,試對下列各算式進行二進制補碼運算: (2)8 + 18 = ?[8]補=[8

C++ PRimer PLUS中文版 章chapter11答案 參考

bject get quit primer rime 答案 std cat tar #include <iostream>#include <cstdlib>#include <ctime>#include "vector.h" int

PMBOK() PMP筆記——《十專案風險管理

第十一章 風險管理: 專案的獨特性導致專案充滿風險,專案風險是一種不確定的事件或條件,可能發生、將 要發生,也可能不發生。 已發生的消極風險可視為問題,問題又會引發風險。 7 個過程: 1、規劃風險管理:制定風險管理計劃,指導如何實施、開展專案的風險管理活動; 2、識別風險:識別專

c++ primer Plus 五章學習筆記

1、cout可以輸出表達式的值,在不特殊設定的情況下,若表示式為判斷表示式則輸出的是0/1,若為賦值表示式則將修改其中的變數值,注意在輸出表達式的值時要加將表示式加(),因為<<的優先順序高於表示式中的運算子。 例: #include<stdafx.h> #inclu

C++ Primer Plus九章課後程式設計答案

  1. //golf.h--for pe9-1.cpp const int Len = 40; struct golf { char fullname[Len]; int handicap; }; void setgolf(golf &g, const char *n

C++ Primer Plus程式設計練習答案 12章 類和動態記憶體分配

本章所有程式設計練習的工程原始碼可在此處下載(點選此連結下載),供大家參考交流! 1. 對於下面的類宣告: class Cow {          char name[20];          char *hobby;          double wei

c++ primer plus 四章重點內容總結 以及手碼練習題答案

1.陣列 可儲存多個同類型的的值。宣告時候 型別 陣列名【元素個數】。其中元素個數必須是整型常數或者const值,常量表達式。c++陣列都是從0開始編號。最後一個元素的索引比陣列長度小一。貌似編譯器不會檢查使用的下表是否有效。sizeof用於陣列名時得到整個陣列中的位元組數

資料庫系統概念習題答案——第二章關係模型介紹

第二章 關係模型介紹Employee(person-name,  street,  city) Works(person-name,  company-name,  salary) Company(company-name,  city) 圖2-14    習題2.1,

C++ primer Plus中文版 五章 迴圈和關係表示式 程式設計練習答案

第五章 程式設計練習 1. 編寫一個要求使用者輸入兩個整數的程式。該程式將計算並輸出兩個整數之間(包括這兩個整數)所有整數的和。    這裡假設先輸入較小的整數。例如:如果使用者輸入的是2和9,則程式將指出2~9 之間所有的整數的和為44. 1.1 for 迴圈版 #incl

計算機網路知識點總結,謝希仁

計算機網路知識點總結   1、三網:現如今最重要的三種網路  電信網路(電話網)   有線電視網路(電視網)   計算機網路(發展最快,資訊時代的核心技術,連通性,共享)1.1、 計算機網路的定義:是指將地理位置不同的具有獨立功能的多臺計算機及其外部裝置,通過通訊線路連線起來,在網路作業系統,網

資料庫系統概念課後習題答案-三章SQL實踐習題

3.1 使用大學模式,用SQL寫出如下查詢。(建議在一個數據庫上實際執行這些查詢,使用我們在本書的Web網站db-book.com上提供的樣本資料,上述網站還提供瞭如何建立一個數據庫和載入樣本資料的說明。)Classroom(building, room_number, ca

資料庫系統概念習題答案——第一章引言

第一章引言實踐習題1.1 這一章講述了資料庫系統的幾個主要的優點。它有哪兩個不足之處?(1)    建立一個數據庫系統需要很多知識、技巧和時間。(2)    資料庫的複雜性可能會導致糟糕的效能1.2 列

軟體工程-軟體工程導論十三章 軟體專案管理圖片+文字=詳細

1 引言        今天去給發展預備黨員的積極分子評分,在他們的個人展示中,見到了許多優秀的同學,在向他們學習的同時,對於我個人來說,更重要的是做自己,走好自己的路。活動結束之後,我在思考一個問題,究竟什麼是優秀?這個問題,如果看到這篇文章的讀者有興趣,可以與我共同交流和

PMP中的掙值相關的計算相關總結

PMP(第六版)中的掙值相關的計算 首先明確幾個基本概念: EV:掙值,指目前完成工作的價值。—–單位是(元) PV:計劃價值,計劃完成工作量的價值。—–單位是(元) AC:實際成本,實際完成工作量產生的成本。—–單位是(元) 這裡要說明一點的是EV、

C++ Primer Plus程式設計練習答案 7章 函式——C++的程式設計模組

本章所有程式設計練習的工程原始碼可在此處下載(點選開啟下載連結),供大家參考交流! 1. 編寫一個程式,不斷要求使用者輸入兩個數,直到其中的一個為0。對於每兩個數,程式將使用一個函式來計算它們的調和平均數,並將結果返回給main(),而後者將報告結果。調和平均數指的是倒

C++ Primer Plus:中文版PDF下載

邏輯操作符 使用 wid site ive 友元 rime blank 虛函數 網盤下載地址:C++ Primer Plus:中文版(第六版)PDF下載 – 易分享電子書PDF資源網 作者: Stephen Prata 出版社: 人民郵電

安卓開發學習筆記—————《Anroid編程權威指南章 Android編程與兼容性問題

studio 通知 編譯 應用 之間 學習 權威指南 安卓 兼容性問題 SDK最低版本 操作系統會拒絕將應用安裝在系統版本低於標準的設備上。 SDK目標版本 目標版本的設定值告知Android:應用時為哪個API級別設計的。 SDK編譯版本 SDK最低版本和目標版本會通知給