1.原生js——數(shù)據(jù)類型和運算符

數(shù)據(jù)類型

JavaScript 語言的每一個值,都屬于某一種數(shù)據(jù)類型。JavaScript 的數(shù)據(jù)類型,共有六種。(ES6 又新增了第七種 Symbol 類型的值)

  • 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
    字符串(string):字符組成的文本(比如"Hello World")
  • 布爾值(boolean):true(真)和false(假)兩個特定值
  • undefined:表示“未定義”或不存在,即由于目前沒有定義,所以此處暫時沒有任何值
  • null:表示無值,即此處的值就是“無”的狀態(tài)。
  • 對象(object):各種值組成的集合
  • Symbol ( 在 ECMAScript 6 中新添加的類型).。一種數(shù)據(jù)類型,它的實例是唯一且不可改變的。

typeof運算符

typeof運算符可以返回一個值的數(shù)據(jù)類型。

1、原始類型
數(shù)值、字符串、布爾值分別返回number、string、boolean。

typeof 134 //"number"
typeof '你好'//"string"
typeof false//"boolean"

數(shù)值、字符串、布爾值.png

2、函數(shù)
函數(shù)返回function。

function a() {}
typeof a //"function"
函數(shù).png

3、undefined
undefined返回undefined

typeof undefined //"undefined"
undefined.png

利用這一點,typeof可以用來檢查一個沒有聲明的變量,而不報錯。

檢查一個沒有聲明的變量.png

4、其他

typeof window //"object"
typeof [] //"object"
typeof {} //"object"
typeof null //"object"
其他.png

5、布爾值

布爾值代表“真”和“假”兩個狀態(tài)。“真”用關(guān)鍵字true表示,“假”用關(guān)鍵字false表示。布爾值只有這兩個值。

下列運算符會返回布爾值:
兩元邏輯運算符:&& (And),|| (Or)
前置邏輯運算符: ! (Not)
相等運算符:===!==,==!=
比較運算符:>,>=,<,<=

如果JavaScript預(yù)期某個位置應(yīng)該是布爾值,會將該位置上現(xiàn)有的值自動轉(zhuǎn)為布爾值。轉(zhuǎn)換規(guī)則是除了下面六個值被轉(zhuǎn)為false,其他值都視為true。

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""''(空字符串)

布爾值往往用于程序流程的控制 如:

if ('') {
  console.log(true);// 沒有輸出
}

上面代碼的if命令后面的判斷條件,預(yù)期應(yīng)該是一個布爾值,所以JavaScript自動將空字符串轉(zhuǎn)為布爾值false,導(dǎo)致程序不會進入代碼塊,所以沒有任何輸出。

空數(shù)組[])和空對象{})對應(yīng)的布爾值,都是true

if ([]) {
  console.log(true); //true
}
if ({}) {
  console.log(true);//true
} 
空數(shù)組、空對象.png

運算符

1、算數(shù)運算符

  • 加法運算符(Addition):x + y
  • 減法運算符(Subtraction): x - y
  • 乘法運算符(Multiplication): x * y
  • 除法運算符(Division):x / y
  • 余數(shù)運算符(Remainder):x % y
  • 自增運算符(Increment):++x 或者 x++
  • 自減運算符(Decrement):--x 或者 x--
  • 求負運算符(Negate):-x
  • 數(shù)值運算符(Convert to number): +x

2、賦值運算符

  • 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
  • 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
  • x ^= y // 等同于 x = x ^ y

3、比較運算符

比較運算符比較兩個值,然后返回一個布爾值,表示是否滿足比較條件。

  • == 相等
  • === 嚴格相等
  • != 不相等
  • !== 嚴格不相等
  • < 小于
  • <= 小于或等于
  • > 大于
  • >= 大于或等于

4、布爾運算符

  • ! 取反運算符
  • && 且運算符
  • || 或運算符
  • condition? true case : false case 三元條件運算符

5、位運算符

  • 或運算(or):符號為|,表示兩個二進制位中有一個為1,則結(jié)果為1,否則為0。
  • 與運算(and):符號為&,表示兩個二進制位都為1,則結(jié)果為1,否則為0。
  • 否運算(not):符號為,表示將一個二進制位變成相反值。
  • 異或運算(xor):符號為?,表示兩個二進制位中有且僅有一個為1時,結(jié)果為1,否則為0。
  • 左移運算(left shift):符號為<<
  • 右移運算(right shift):符號為>>
  • 帶符號位的右移運算 (zero filled right shift):符號為>>>

6、匯總表

優(yōu)先級 運算類型 關(guān)聯(lián)性 運算符
20 圓括號 n/a ( … )
19 成員訪問 從左到右 … . …
19 需計算的成員訪問 從左到右 … [ … ]
19 new (帶參數(shù)列表) n/a new … ( … )
19 函數(shù)調(diào)用 從左到右 … ( … )
18 new (無參數(shù)列表) 從右到左 new …
17 后置遞增(運算符在后) n/a … ++
17 后置遞減(運算符在后) n/a … --
16 邏輯非 從右到左 ! …
16 按位非 從右到左 ~ …
16 一元加法 從右到左 + …
16 一元減法 從右到左 - …
16 前置遞增 從右到左 ++ …
16 前置遞減 從右到左 -- …
16 typeof 從右到左 typeof …
16 void 從右到左 void …
16 delete 從右到左 delete …
15 從右到左 … ** …
14 乘法 從左到右 … * …
14 除法 從左到右 … / …
14 取模 從左到右 … % …
13 加法 從左到右 … + …
13 減法 從左到右 … - …
12 按位左移 從左到右 … << …
12 按位右移 從左到右 … >> …
12 無符號右移 從左到右 … >>> …
11 小于 從左到右 … < …
11 小于等于 從左到右 … <= …
11 大于 從左到右 … > …
11 大于等于 從左到右 … >= …
11 in 從左到右 … in …
11 instanceof 從左到右 … instanceof …
10 等號 從左到右 … == …
10 非等號 從左到右 … != …
10 全等號 從左到右 … === …
10 非全等號 從左到右 … !== …
9 按位與 從左到右 … & …
8 按位異或 從左到右 … ^ …
7 按位或 從左到右 … | …
6 邏輯與 從左到右 … && …
5 邏輯或 從左到右 … || …
4 條件運算符 從右到左 … ? … : …
3 賦值 從右到左 … = …
3 從右到左 … += …
3 從右到左 … -= …
3 從右到左 … *= …
3 從右到左 … /= …
3 從右到左 … %= …
3 從右到左 … <<= …
3 從右到左 … >>= …
3 從右到左 … >>>= …
3 從右到左 … &= …
3 從右到左 … ^= …
3 從右到左 … |= …
2 yield 從右到左 yield …
yield* 從右到左 yield* …
1 展開運算符 n/a ... …
0 逗號 從左到右 … , …

ps:Undefined、Null、 +0、 ?0、 NaN、空字符串為 false

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容