Javascript數據類型與基本運算

標識符命名規則

對於變量名,鍵值對中的鍵名應知足以下要求:正則表達式

  • 開頭必須是字母、下劃線(_)或美圓符號($)
  • 除了開頭之外的字符也能夠是數字
  • 不能夠是關鍵字和保留字
  • 最好不要和全局變量/函數同名,會把原有變量/函數覆蓋的風險

這裏,關鍵字就是在 js 中有特殊意義的單詞,而保留字是爲了之後使用預留的詞語。但不要求背它們,隨着學習的深刻,天然就都記住了。數組

常見的關鍵字有:瀏覽器

break、delete、function、return、typeof、case、do、if、switch、var、catch、else、in、this、void、continue、false、instanceof、throw、while、debugger、finally、new、true、const、with、let、default、for、null、try、async 等等async

常見的保留字有:函數

class、enum、export、extends、import 、super等等學習

本文可能會直接用到的有:this

  • var: 定義一個變量
  • console.log(): 在瀏覽器控制檯或後臺終端輸出一個值
  • alert(): 在瀏覽器彈窗輸出一個值

基本數據類型

Javascript 基本類型包括:數值,字符串,null,undefined 和布爾型。還有 ES6 中的 Symbol 類型,這篇博客暫時先不提 Symbol 類型。spa

好比:debug

var num = 1;    //數值型
var str = 'hello world';   //字符串,雙引號也能夠
var flag = true;   //布爾型,取值 true 或 false
var obj = null;    //空類型
var it = undefined;   //undefined

這裏簡單解釋一下須要注意問題:code

  1. 數值類型是不區分整型與浮點型的;
  2. 數值類型默認都是以 double 浮點數形式儲存的;
  3. 數值類型範圍在 5e-324 至1.7976931348623157e+308,即 `Number.MIN_VALUE 至 Number.MAX_VALUE;
  4. js 沒有字符類型,只有字符串類型;
  5. null 表示正常的、意料之中的空值,而 undefined 表示之外的空值。對於只聲明未賦值的變量,默認值爲 undefined;
  6. 數值類型有幾個特殊值:
  • Infinity: 正無窮
  • -Infinity:負無窮
  • NaN:非法數值(Not a Number),但他仍是個數值(好矛盾)

複雜數據類型

基本數據類型對應的對象

js 中其實除了基本類型之外其餘類型的本質都是對象,就算是基本類型變量,除了 undefined 和 null 之外,都有其對應的對象類型。以下:

var num = new Number(2);
var str = new String('hello');
var flag = new Boolean(true);

這裏必定要清楚,其對象類型和基本類型不是一個東西,具體的看完類型轉換就一切都清楚了。

js中其餘常見的對象

固然,下面繼續說對象,js 經常使用的對象有:Array,Object,Date,RegExp等等。定義方法以下:

var arr = new Array();   //獲得一個空數組
var arr2 = new Array(5);   //獲得一個長度爲5的數組,初值爲undefined
var arr3 = new Array('b','a','c');    //獲得一個長爲3,對應值爲'b','a','c' 的數組
var obj = new Object();   //獲得一個空對象
var now = new Date();    //獲得當前時間
var reg = RegExp('^[A-Za-z][\w\d]*$');   //獲得一個正則表達式

對於數組、正則表達式和對象還有一種字面量的定義方法,這個方法和上面是徹底等價的:

var arr = [];   //獲得一個空數組
var arr3 = ['b','a','c'];    //獲得一個長爲3,對應值爲'b','a','c' 的數組
var obj = {};   //獲得一個空對象
var reg = /^[A-Za-z][\w\d]*$/;  //獲得一個正則表達式

數組和對象的訪問

這個部分直接舉例子:

  • 數組:一些數據的集合,這裏不要求數據必須是一樣類型的
var arr = [1, 2, 3, 'a'];    //定義一個數組
arr[0];     //1     訪問數組的第1個元素,注意索引從0開始
arr[1];     //2     訪問數組的第2個元素
arr[3];     //'a'    訪問數組的第4個元素
arr[-1],  arr[4],  arr[1.3];    //undefined   訪問數組越界或索引不正確都返回 undefined
  • 對象: 鍵值對的集合,鍵值對之間由逗號分開,鍵和值由冒號分開
var obj = {
    name: 'Bob',
    age: 18,
    gender: 'M'
};
obj.name;    //'Bob'  獲取 obj 對象的姓名
obj.age;    //18  獲取 obj 對象的年齡
obj.gender;    //'M'  獲取 obj 對象的性別

注意當鍵名中有符號也須要加引號。

其他的對象會在之後用到的時候再仔細講

基本運算和運算符

運算符就像咱們數學中的加減乘除,也像數學中的計算規定的前後順序,這裏我直接給出因此運算符的運算順序和實例,必要的解釋在表格後面,沒有解釋到的屬於比較深奧的運算符,記住它的順序便可,功能後續再理解。

優先級 運算符 結合性 舉例 說明
20 圓括號 n/a ( … ) -
19 成員訪問 從左到右 obj.name -
需計算的成員訪問 從左到右 obj["name"] -
new (帶參數列表) n/a new Person() -
18 函數調用 從左到右 fun(args) -
new (無參數列表) 從右到左 new fun -
17 後置遞增 n/a a++ 至關於 a = a + 1;
後置遞減 n/a a-- 至關於 a = a - 1;
16 邏輯非 從右到左 !a -
按位非 從右到左 ~a -
一元加法 從右到左 +a -
一元減法 從右到左 -a -
前置遞增 從右到左 ++a -
前置遞減 從右到左 --a -
typeof 從右到左 typeof 4 獲得值的類型 'number'
void 從右到左 void(0) 執行表達式並返回 undefined
delete 從右到左 delete obj.age 刪除對象屬性
15 從右到左 2**4 得16
14 乘法 從左到右 2 * 3 得 6
除法 從左到右 4 / 2 得 2
取模 從左到右 4 % 3 得 1
13 加法 從左到右 1 + 3 得 4
減法 從左到右 2 - 3 得 -1
12 按位左移 從左到右 32 << 5 得 1024
按位右移 從左到右 32 >> 3 得 8
無符號右移 從左到右 -32 >>> 2 得 1073741816
11 小於 從左到右 -1 < 2 得 true
小於等於 從左到右 -1 <= 2 得 true
大於等於 從左到右 1 >= 2 得 false
大於 從左到右 1 > 2 得 false
in 從左到右 "name" in obj -
instanceof 從左到右 li instanceof HTMLElement -
10 等號 從左到右 5 == '5' 得 true
非等號 從左到右 5 != '5' 得 false
全等號 從左到右 5 === '5' 得 false
非全等號 從左到右 5 !== '5' 得 true
9 按位與 從左到右 10 & 40 得 8
8 按位異或 從左到右 10 ^ 40 得 34
7 按位或 從左到右 10 | 40 得 42
6 邏輯與 從左到右 0 && 3 得 0,不得 false
5 邏輯或 從左到右 0 || 3 得 3,不得 true
4 ?: 從右到左 3 != 0 ? 1 : 2 得 1
3 賦值 從右到左 a = 2 -
a += 2 至關於 a = a + 2
a -= 2 至關於 a = a - 2
a *= 2 至關於 a = a * 2
a /= 2 至關於 a = a / 2
a &= 2 至關於 a = a & 2
a |= 2 至關於 a = a | 2
a ^= 2 至關於 a = a ^ 2
a %= 2 至關於 a = a % 2
a <<= 2 至關於 a = a << 2
a >>= 2 至關於 a = a >> 2
a >>>= 2 至關於 a = a >>> 2
2 yield 從右到左 yield returnValue; -
yield* 從右到左 yield* returnValue; -
1 展開運算符 n/a arr1.push(...arr2) -
0 逗號 從左到右 a=1, b=2 返回最後一個表達式的值 2

須要說明的是:

  1. 優先級越高的優先計算,同優先級的從左到右依次計算;
  2. a++ 與 ++a 的區別: 前者先返回值後自加,後者先自加再返回值(a-- 與 --a 同理);
  3. 涉及到位運算的部分不是十分重要,但之後的文章會細談;
  4. == 和 === 的區別,前者比較是發生自動類型轉換,後者不發生自動類型轉換(!= 與 !== 同理);
  5. 對於 exp ? val1 : val2; 若是 exp 的結果爲 true,整個表達式得 val1, 不然得 val2;
相關文章
相關標籤/搜索