第 1 章 JavaScript簡介 使用 Node.js 搭建 Web 伺服器 JavaScript 的類型有數字、字元串、布爾值、函數和對象。還有 undefined 和 null ,以及數組、日期和正則表達式。 操作符 .cnblogs markdown table th:nth child( ...
第 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); } }
繼承
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());
使用屬性存取器
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);
其他功能
ES6還有其他一些功能,包括列表迭代器、類型數組、 Set 、 Map 、 WeakSet 、 WeakMap 、模
塊、尾調用、 Symbol ,等等