1. 程式人生 > >學習Javascript數據結構與算法(第2版)筆記(1)

學習Javascript數據結構與算法(第2版)筆記(1)

布爾值 efi prim ray 叠代器 undefined ply 內部 HA

第 1 章 JavaScript簡介

  • 使用 Node.js 搭建 Web 服務器

    npm install http-server -g
    http-server
  • JavaScript 的類型有數字、字符串、布爾值、函數和對象。還有 undefined 和 null ,以及數組、日期和正則表達式。

  • 操作符

    算數操作符 描述
    + 加法
    - 減法
    * 乘法
    / 除法
    % 取余
    ++ 遞增
    -- 遞減

    賦值操作符 描述
    = 賦值
    += 加/賦值 (x += y) == (x = x + y)
    -= 減/賦值 (x -= y) == (x = x - y)
    *= 乘/賦值 (x = y) == (x = x y)
    /= 除/賦值 (x /= y) == (x = x / y)
    %= 取余/賦值 (x %= y) == (x = x % y)

    比較操作符 描述
    == 相等
    === 全等
    != 不等
    > 大於
    >= 大於等於
    < 小於
    <= 小於等於

    邏輯操作符 描述
    &&
    ||
    !

    位操作符 描述
    &
    |
    ~
    ^ 異或
    << 左移
    >> 右移

  • typeof 操作符可以返回變量或表達式的類型
  • JavaScript還支持 delete 操作符,可以刪除對象裏的屬性

    數值類型 轉換成布爾值
    undefined false
    null false
    布爾值 true是 true ,false是 false
    數字 +0 、 -0 和 NaN 都是 false ,其他都是 true
    字符串 如果字符串是空的(長度是0)就是 false ,其他都是 true
    對象 true

  • 相等操作符( == 和 === )
類型(x) 類型(y) 結 果
null undefined true
undefined null true
數字 字符串 x == toNumber(y)
字符串 數字 toNumber(x) == y
布爾值 任何類型 toNumber(x) == y
任何類型 布爾值 x == toNumber(y)
字符串或數字 對象 x == toPrimitive(y)
對象 字符串或數字 toPrimitive(x) == y

  • 如果x和y是相同類型,JavaScript會比較它們的值或對象值。其他沒有列在這個表格中的情況
    都會返回 false 。
  • toNumber 和 toPrimitive 方法是內部的,並根據以下表格對其進行估值。
  • toNumber 方法對不同類型返回的結果如下:

值類型 結 果
undefined NaN
null +0
布爾值 如果是 true ,返回 1 ;如果是 false ,返回 +0
數字 數字對應的值
字符串 將字符串解析成數字。如果字符串中包含字母,返回 NaN ;如果是由數字字符組成的,轉換成數字
對象 Number(toPrimitive(vale))

  • toPrimitive 方法對不同類型返回的結果如下:

值類型 結 果
對象 如果對象的 valueOf 方法的結果是原始值,返回原始值。如果對象的 toString方法返回原始值,就返回這個值;其他情況都返回一個錯誤
  • === 操作符,如果比較的兩個值類型不同,比較的結果就是 false 。如果比較的兩個值類型相同,結果會根據下表判斷。

#
|類型(x)| 值 | 結 果|
|:--:|:--:|:--:|
|數字| x和y數值相同(但不是 NaN ) |true|
|字符串 | x和y是相同的字符 | true|
|布爾值 | x和y都是 true 或 false| true|
|對象 | x和y引用同一個對象 | true|

ECMAScript 6

  • 用 let 替代 var 聲明變量
  • 常量 const PI = 3.141593;
  • 模板字面量
    var name=‘123‘; console.log(`my name is ${name}`);
  • 箭頭函數

    let circleArea2 = (r) => 3.14 * r * r;
  • 函數的參數默認值

    function sum(x=1,y=2,z=3){
    return x+y+z;
    }
    sum(4,6);//13
  • 聲明展開和剩余參數

在ES5中,我們可以用 apply() 函數把數組轉化為參數。
ES6有了展開操作符( ... )。

var params = [3, 4, 5];
console.log(sum(...params));
等價於
var params = [3, 4, 5];
console.log(sum.apply(undefined, params));

在函數中,展開操作符( ... )也可以代替 arguments ,當作剩余參數使用。

function restParamaterFunction (x, y, ...a) {
    return (x + y) * a.length;
}
console.log(restParamaterFunction(1, 2, "hello", true, 7)); //輸出9;
等價於
function restParamaterFunction (x, y) {
    var a = Array.prototype.slice.call(arguments, 2);
    return (x + y) * a.length;
};
  • 增強的對象屬性

ES6引入了數組解構的概念,可以用來一次初始化多個變量

var [x,y] = [‘a‘,‘b‘];//初始化
[x,y] = [y,x];//值互換
  • 使用類進行面向對象編程

    class Book { //{2}
    constructor (title, pages, isbn) {
        this.title = title;
        this.pages = pages;
        this.isbn = isbn;
    }
    printIsbn(){
        console.log(this.isbn);
    }
    }
  1. 繼承

    class ITBook extends Book { 
    constructor (title, pages, isbn, technology) {
        super(title, pages, isbn); 
        this.technology = technology;
    }
    printTechnology(){
        console.log(this.technology);
    }
    }
    let jsBook = new ITBook(‘學習JS算法‘, ‘200‘, ‘1234567890‘, ‘JavaScript‘);
    console.log(jsBook.title);
    console.log(jsBook.printTechnology());
  2. 使用屬性存取器

    class Person {
    constructor (name) {
        this._name = name; 
    }
    get name() { 
        return this._name;
    }
    set name(value) { 
        this._name = value;
    }
    }
    let lotrChar = new Person(‘Frodo‘);
    console.log(lotrChar.name); //{4}
    lotrChar.name = ‘Gandalf‘; //{5}
    console.log(lotrChar.name);
    lotrChar._name = ‘Sam‘; //{6}
    console.log(lotrChar.name);
  3. 其他功能

ES6還有其他一些功能,包括列表叠代器、類型數組、 Set 、 Map 、 WeakSet 、 WeakMap 、模
塊、尾調用、 Symbol ,等等

學習Javascript數據結構與算法(第2版)筆記(1)