詳解JS運算子

2021-07-16 08:26:39 字數 3451 閱讀 1308

如果算術運算的值不是數值,那麼js後台會先使用number()轉型函式將其轉換為數值:

var num = 1 + nan;//nan,只要有乙個nanny就為nan

var num = 10 + '10';//1010,'+'為字串連線符,有字串就不是加法

var box = '你的歲數是:'+10+10;//你的歲數是:1010,被轉換成字串

var box = '你的歲數是'+(10+10);//你的歲數是:20,沒有被轉換成字串

var box = 10+10+'是你的歲數';//20是你的歲數,沒有被轉換成字串

第乙個運算元

第二個運算元

結果true

true

true

true

false

false

false

true

false

false

false

false

如果兩邊的運算元有乙個運算元不是布林值的情況下,與運算子就不一定返回布林值,此時,遵循以下規則:

1. 第乙個運算元是物件,則返回第二個運算元

2. 第二個運算元是物件,則第乙個運算元返回true,才返回第二個運算元,否則返回false;

3. 有乙個運算元是null,則返回null;

4. 有乙個運算元是undefined,則返回undefined。

var box = 物件 && (5>4);//true,返回第二個運算元

var box = (5>4)&&物件;//[object object]

var box = (3>4)&&物件;//false

var box = (5>4)&&null;//null

var result = true || false;
與邏輯與操作相似,如果有乙個運算元不是布林值,邏輯或也不一定返回布林值;此時,它遵循下列規則:
□ 如果第乙個運算元是物件,則返回第乙個運算元。

□ 如果第乙個運算元求值為false,則返回第二個運算元。

□ 如果兩個運算元都是物件,則返回第乙個運算元。

□ 如果兩個運算元都是null,返回null

□ 如果兩都為`undefined`,返`undefined`。

□ 如果兩都為`nan`,返`nan`

var box = 物件||(5>3);//[object object]

var box = (5>3)||物件;//true

var box = 物件1 || 物件2;//[object object]

var box = null || null;//null

var box = nan || nan;//nan

var box = undefined || undefined;//undefined

邏輯非運算子可以用於任何值。無論這個值是什麼資料型別,這個運算子都會返回乙個布林值。它會先將這個值轉換成布林值,然後取反,規則如下:
1. 運算元是乙個物件,返回false

2. 運算元是乙個空字串,返回true

3. 運算元是乙個非空字串,返回false

4. 運算元是數值0,返回true

5. 運算元是任意非0數值(包括infinity),false

6. 運算元是null,返回true

7. 運算元是nan,返回true

8. 運算元是undefined,返回true

var box = !{};//false

var box = !'trigkit';//false

var box = !0;//true

var box = !null;//true

var box = !nan;//true

var box = !8;//false

對於雙感嘆號!!的寫法其實是boolean()的簡寫法。比如下面是來自underscore.js的一段原始碼:
// is a given value a dom element?

_.iselement = function

(obj)

;

返回的值就是布林值
1.兩個運算元都是數值,則進行數值比較

2.兩個運算元都是字串,則比較兩個字串對應的字元編碼值

3.兩個運算元有乙個是數值,則將另乙個轉換為數值,再進行數值比較

4.兩個運算元有乙個是物件,則先呼叫valueof()方法或tostring()方法,再用結果比較

var num = '3'>22;//

false

var num = '3'>'22';//

true,進行第乙個數字的比較3>2,所以是true

var num = 'a'>'b';//

false,a=97,b=98,ascii表

var num = 'a'>'b';//

true,b=66

相等操作符會對操作值進行隱式轉換後進行比較:
1.如果乙個操作值為布林值,則在比較之前先將其轉換為數值,false轉成0,true為1;

2.如果乙個操作值為字串,另乙個操作值為數值,則通過number()函式將字串轉換為數值

3.如果乙個操作值是物件,另乙個不是,則呼叫物件的valueof()方法,得到的結果按照前面的規則進行比較

4.null與undefined是相等的

5.如果乙個操作值為nan,則相等比較返回false

6.如果兩個操作值都是物件,則比較它們是不是指向同乙個物件。如果兩個運算元都指向同乙個物件,則相等操作符返回true,否則,返回false

7.在全等和不全等的判斷上,只有值和型別都相等,才返回true,否則返回false;

看下面的例項:
var num =2==2;//

true

var num = '2'==2;//

true,'2'會轉成數值2

var num = false ==0;//

true,false轉成數值就是0

var num = 'a'=='a';//

false,轉換後的編碼不一樣

var num = 2==nan;//

false,只要有nan,都是false

var num = {}=={};//

false,比較的是他們的位址,每個新建立物件的引用位址都不同

var age = {};

var height = age;

var box = age == height;//

true,引用位址一樣,所以相等

分享一張網上找的思維導圖:

mrcxt

進入mrcxt的wordpress部落格

詳解js運算子

如果算術運算的值不是數值,那麼js後台會先使用number 轉型函式將其轉換為數值 var num 1 nan nan,只要有乙個nanny就為nan var num 10 10 1010,為字串連線符,有字串就不是加法 var box 你的歲數是 10 10 你的歲數是 1010,被轉換成字串 v...

JS賦值運算子詳解

賦值運算子左側的運算元必須是變數 物件屬性或陣列元素,也稱為左值。例如,下面的寫法是錯誤的,因為左側的值是乙個固定的值,不允許操作。1 100 返回錯誤賦值運算有以下兩種形式 附加操作的賦值運算子 賦值運算子 說明示例 等效於 加法運算或連線操作並賦值 a b a a b 減法運算並賦值 a b a...

JS逗號運算子(,)詳解

js教程逗號運算子是二元運算子,它能夠先執行運算子左側的運算元,然後再執行右側的運算元,最後返回右側運算元的值。本篇文章由泉州seowww.234yp.com 整理發布,js教程 www.234yp.com article 188242.html 謝謝合作!逗號運算子可以實現連續運算,如多個變數連續...