博客 / 詳情

返回

JavaScript 基礎筆記碎片-數據類型、變量與字符串操作

注意:本篇學習筆記摘錄於原網站: 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的關鍵字,如ifwhile等。申明一個變量用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'

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.