注意:本篇學習筆記摘錄於原網站: JavaScript教程 - 廖雪峯的官方網站
筆記僅作學習留檔使用
本篇目錄
比較運算符
BigInt
變量
strict模式
字符串
多行字符串
模板字符串
操作字符串
比較運算符
JavaScript允許對任意數據類型做比較:
false == 0; // true
false === 0; // false
比較方式對比:
==:自動轉換數據類型後再比較(容易產生意外結果)===:嚴格比較,數據類型不一致直接返回false
建議始終使用 === 進行比較。
另一些特殊值的比較:
//`NAN`這個特殊的Number與所有其他值都不相等,包括它自己:
NaN === NaN; // false
isNaN(NaN); // true - 正確判斷方法
//浮點數
1 / 3 === (1 - 2 / 3); // false
//計算它們之差的絕對值,看是否小於某個閾值
Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true - 正確比較方式
BigInt
JavaScript的Number不區分整數和浮點數,並且JavaScript的整數最大範圍不是±2(63),而是±2(53)。BigInt類型可以精確表示比更大的整數,在整數後加一個n,例如9223372036854775808n,或使用BigInt()把Number和字符串轉換成BigInt。可以正常進行加減乘除等運算,結果仍然是一個BigInt,但不能把一個BigInt和一個Number放在一起運算::
// 創建 BigInt
const bi1 = 9223372036854775807n;
const bi2 = BigInt(12345);
const bi3 = BigInt("0x7fffffffffffffff");
// 比較
console.log(bi1 === bi3); // true
// 正常運算
console.log(1234567n + 3456789n);
console.log(1234567n / 789n); // 1564n(結果仍為 BigInt)
// 類型混合錯誤
console.log(1234567n + 3456789); // 會顯示Uncaught TypeError: Cannot mix BigInt and other types
變量
變量在JavaScript中就是用一個變量名錶示,變量名是大小寫英文、數字、$和_的組合,且不能用數字開頭。變量名也不能是JavaScript的關鍵字,如if、while等。申明一個變量用var語句,比如:
var a; // 申明瞭變量a,此時a的值為undefined
var $b = 1; // 申明瞭變量$b,同時給$b賦值,此時$b的值為1
var s_007 = '007'; // s_007是一個字符串
var Answer = true; // Answer是一個布爾值true
var t = null; // t的值是null
// let 聲明(現代推薦)
let name = '小明';
變量名也可以用中文,但是,請不要給自己找麻煩。
在JavaScript中,使用等號=對變量進行賦值。可以把任意數據類型賦值給變量,同一個變量可以反覆賦值,而且可以是不同類型的變量,但是要注意只能用var申明一次,例如:
var a = 123; // a的值是整數123
a = 'ABC'; // a變為字符串
// 變量輸出
console.log(x); // 推薦:控制枱輸出
alert(x); // 不推薦:彈窗干擾
strict模式
如果一個變量沒有通過var申明就被使用,那麼該變量就自動被申明為全局變量:
i = 10; // 全局變量
在同一個頁面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了變量i,將造成變量i互相影響,產生難以調試的錯誤結果。
使用var申明的變量則不是全局變量,它的範圍被限制在該變量被申明的函數體內(函數的概念將稍後講解),同名變量在不同的函數體內互不衝突。在strict模式下運行的JavaScript代碼,強制通過var申明變量,未使用var申明變量就使用的,將導致運行錯誤。啓用strict模式的方法是在JavaScript代碼的第一行寫上:
'use strict';
//不支持strict模式的瀏覽器會把它當做一個字符串語句執行,支持strict模式的瀏覽器將開啓strict模式運行JavaScript。
字符串
是用''或""括起來的字符表示。如果'本身也是一個字符,那就可以用""括起來;如果字符串內部既包含'又包含"就用轉義字符\來標識,比如:
'I\'m \"OK\"!'; // I'm "OK"!
轉義字符\可以轉義很多字符:
//`\n`表示換行
//`\t`表示製表符
`\\`; //字符`\`本身也要轉義,所以`\\`表示的字符就是`\`。
//ASCII字符以`\x##`形式的十六進制表示
'\x41'; // 完全等同於 'A'
//用`\u####`表示一個Unicode字符:
'\u4e2d\u6587'; // 完全等同於 '中文'
多行字符串
多行字符串用\n寫起來比較費事,有一種多行字符串的表示方法(ES6標準新增),用反引號...表示:
`這是一個
多行
字符串`;
反引號在鍵盤的ESC下方,數字鍵1的左邊:
┌─────┐ ┌─────┬─────┬─────┬─────┐
│ ESC │ │ F1 │ F2 │ F3 │ F4 │
└─────┘ └─────┴─────┴─────┴─────┘
┌─────┬─────┬─────┬─────┬─────┐
│ ~ │ ! │ @ │ # │ $ │
│ ` │ 1 │ 2 │ 3 │ 4 │
└─────┴─────┴─────┴─────┴─────┘
模板字符串
要把多個字符串連接起來,可以用+號連接:
let name = '小明';
let age = 20;
let message = '你好, ' + name + ', 你今年' + age + '歲了!';
alert(message);//顯示:你好, 小明, 你今年20歲了!
(ES6新增)或者一種模板字符串,它會自動替換字符串中的變量:
let name = '小明';
let age = 20;
let message = `你好, ${name}, 你今年${age}歲了!`;
alert(message);
操作字符串
要獲取字符串某個指定位置的字符,使用下標操作,索引號從0開始;字符串是不可變的,如果對字符串的某個索引賦值,不會有任何錯誤,但是,也沒有任何效果:
let s = 'Hello, world!';
s[0]; // 'H'
s[6]; // ' '
s[7]; // 'w'
s[12]; // '!'
s[13]; // undefined 超出範圍的索引不會報錯,但一律返回undefined
let s = 'Test';
s[0] = 'X';
console.log(s); // s仍然為'Test'
改變字符串有一些常用方法,單調用這些方法本身——不會改變原有字符串的內容,而是返回一個新字符串:
//1.toUpperCase():字符串全部變為大寫
let s = 'Hello';
s.toUpperCase(); // 返回'HELLO'
//2.toLowerCase():字符串全部變為小寫
let s = 'Hello';
let lower = s.toLowerCase(); // 返回'hello'並賦值給變量lower
lower; // 'hello'
//3.indexOf():搜索指定字符串出現的位置
let s = 'hello, world';
s.indexOf('world'); // 返回7
s.indexOf('World'); // 沒有找到指定的子串,返回-1
//4.substring():返回指定索引區間的子串
let s = 'hello, world'
s.substring(0, 5); // 從索引0開始到5(不包括5),返回'hello'
s.substring(7); // 從索引7開始到結束,返回'world'