好的書寫習慣
- 最好不要省略分號,尤其對新手來說
- 確保 “use strict” 出現在最頂部
"use strict";
程式碼以現代模式工作【ES5 規範增加了新的語言特性並且修改了一些已經存在的特性。為了保證舊的功能能夠使用,大部分的修改是預設不生效的。你需要一個特殊的指令 —— "use strict" 來明確地啟用這些特性。】
- " "與 ''區別不大
宣告變數
let user = 'John';
let age = 25;
let message = 'Hello';
let hello = 'Hello world!';
let message;
message = hello; // 將字串 'Hello world' 從變數 hello 複製到 message
alert(hello); // Hello world!
alert(message); // Hello world!
//一個變數應該只被宣告一次。
//對同一個變數進行重複宣告會觸發 error:
const 與 let
- const 將常量用作別名,以便記住那些在執行之前就已知的難以記住的值。
const white = #fff //(十六進位制)格式為顏色宣告常量:
沒有那麼糟糕的var
- var 宣告的變數會在函式開頭被定義,與它在程式碼中定義的位置無關(這裡不考慮定義在巢狀函式中的情況)。人們將這種行為稱為“提升”,因為所有的 var 都被“提升”到了函式的頂部。
if (true) {
var test = true; // 使用 "var" 而不是 "let"
}
alert(test); // true,變數在 if 結束後仍存在
- 【不好找的邏輯錯誤】
var user = "Pete";
var user = "John"; // 這個 "var" 無效(因為變數已經宣告過了)
//不會觸發錯誤,只顯示一次
alert(user); // output John
- 宣告會被提升,但是賦值不會。
所有的 var 宣告都是在函式開頭處理的,我們可以在任何地方引用它們。但是在它們被賦值之前都是 undefined。
function sayHi() {
alert(phrase);
var phrase = "Hello";
}
sayHi();//undefined
NAN
NaN 代表一個計算錯誤。它是一個不正確的或者一個未定義的數學操作所得到的結果 任何對 NaN 的進一步數學運算都會返回 NaN:如果在數學表示式中有一個 NaN,會被傳播到最終結果
只有一個例外:NaN ** 0 結果為 1
** 是個冪運算
在 js 和 Python中,使用 ** 表示冪運算。
alert( 2 ** 2 ); // 2² = 4
alert( 2 ** 3 ); // 2³ = 8
alert( 2 ** 4 ); // 2⁴ = 16
alert( 4 ** (1/2) ); // 2 (1/2 次方)
alert( 8 ** (1/3) ); // 2 (1/3 次方)
在C語言和C++中,冪運算通常使用 pow 函式,例如 pow(a, b)。
在數學表示式中,冪運算通常使用上標表示,例如 a^b 表示 a 的 b 次冪。
運算子
一元運算子優先順序高於二元運算子
- 一元運算子
加號 + 應用於單個值,對數字沒有任何作用。
但是如果運算元不是數字,加號 + 則會將其轉化為數字。它的效果和 Number(...) 相同,但是更加簡短。
- 二元運算子
alert('1' + 2 + 2); // "122",不是 "14"
'12' + 2 === '122'
alert(2 + 2 + '1' ); // "41",不是 "221"
通常,加號 + 用於求和。
但是如果加號 + 被應用於 字串 ,它將合併(連線)各個字串:
二元 + 是唯一一個以這種方式支援字串的運算子。其他算術運算子只對數字起作用,並且總是將其運算元(字元)轉換為數字。
alert( 6 - '2' ); // 4, 將 '2' 轉換為數字
alert( '6' / '2' ); // 3,將兩個運算元都轉換為數字
- 三元運算子;JavaScript 中唯一一個有這麼多運算元的運算子
if (age > 18) {
accessAllowed = true;
} else {
accessAllowed = false;
}
等價於
let accessAllowed = (age > 18) ? true : false;
alert( alert(1) && alert(2) ); //顯示1,返回undefined,&& 使得結束運算
> alert( alert(1) || 2 || alert(3) );//顯示1 然後2.
- 逗號運算子【有意思,少用】
逗號運算子能讓我們處理多個表示式,使用 , 將它們分開。每個表示式都執行了,但是隻有最後一個的結果會被返回。
與運算 && 的優先順序比 || 高
字串比較,字典順序,後面的更大,
從和第一個數字開始比較
"apple" > "pineapple" → false
"2" > "12" → true
普通的相等性檢查 ==
存在一個問題,它不能區分出 0 和 false:
嚴格相等 ===
嚴格不相等!==
null 與 undefined
- JavaScript 中的 null 僅僅是一個代表“無”、“空”或“值未知”的特殊值。
- undefined 的含義是 未被賦值。,如果一個變數已被宣告,但未被賦值,那麼它的值就是 undefined
- 判斷相等時不會進行任何的型別轉換:null 被轉化為 0,undefined 被轉化為 NaN。
undefined 和 null 在相等性檢查 == 中不會進行任何的型別轉換,它們有自己獨立的比較規則,所以除了它們之間互等外,不會等於任何其他的值。
alert( null == undefined ); // true
alert( null == 0 ); // false
- for null,當使用數學式或其他比較方法 < > <= >= 時:
進行值比較時null 會被轉化為數字
alert( null > 0 ); // (1) false
alert( null >= 0 ); // (3) true
- for undefined,undefined 不應該被與其他值進行比較:
alert( undefined > 0 ); // false (1)
alert( undefined < 0 ); // false (2)
alert( undefined == 0 ); // false (3)
Infinity 代表數學概念中的 無窮大 ∞。
number 與BigInt
- number所有大於 (2^53-1) 的奇數都不能用 “number” 型別儲存。
- BigInt型別是最近被新增到 JavaScript 語言中的,用於表示任意長度的整數。
可以透過將 n 附加到整數字段的末尾來建立 BigInt 值。
const bigInt = 1234567890123456789012345678901234567890n;
// 尾部的 "n" 表示這是一個 BigInt 型別
` 反引號
反引號是 功能擴充套件 引號。它們允許我們透過將變數和表示式包裝在 ${…} 中,來將它們嵌入到字串中。
let name = "John";
// 嵌入一個變數
alert(Hello, ${name}!
); // Hello, John!
// 嵌入一個表示式
alert(the result is ${1 + 2}
); // the result is 3
typeof
typeof 運算子返回引數的型別。當我們想要分別處理不同型別值的時候,或者想快速進行資料型別檢驗時,非常有用。
typeof undefined // "undefined"
typeof 0 // "number"
typeof 10n // "bigint"
typeof true // "boolean"
typeof "foo" // "string"
typeof Symbol("id") // "symbol"
七種原始資料型別(基本資料型別):
number 用於任何型別的數字:整數或浮點數,在 ±(253-1) 範圍內的整數。
bigint 用於任意長度的整數。
string 用於字串:一個字串可以包含** 0 個或多個字元,所以沒有單獨的單字元型別。
boolean 用於 true 和 false。
null 用於未知的值 —— 只有一個 null 值的獨立型別。
undefined 用於未定義的值 —— 只有一個 undefined 值的獨立型別。
symbol 用於唯一**的識別符號。
object 用於更復雜的資料結構。
我們可以透過 typeof 運算子檢視儲存在變數中的資料型別。
通常用作 typeof x
typeof null 會返回 "object" —— 這是 JavaScript 程式語言的一個錯誤,實際上它並不是一個 object。
暫停指令碼執行的三劍客
alert
顯示資訊。
alert("Hello");
prompt
顯示資訊要求使用者輸入文字。點選確定返回文字,點選**取消或按下 Esc 鍵返回
let test = prompt("Test", ''); // <-- 用於 IE 瀏覽器//點選取消,之後不會有內容顯示了
null。
confirm
顯示資訊等待使用者點選確定或取消。點選確定返回 true,點選取消或按下 Esc 鍵返回 false。**
let isBoss = confirm("Are you the boss?");
alert( isBoss ); // 如果“確定”按鈕被按下,則顯示 true
p.s.侷限
- 模態視窗的確切位置由瀏覽器決定。通常在頁面中心。
- 視窗的確切外觀也取決於瀏覽器。我們不能修改它。
這些方法都是模態的:它們暫停指令碼的執行,並且不允許使用者與該頁面的其餘部分進行互動,直到視窗被解除。