詳解js運算符

加法運算符

若是算術運算的值不是數值,那麼js後臺會先使用Number()轉型函數將其轉換爲數值:node

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

邏輯非

邏輯非運算符能夠用於任何值。不管這個值是什麼數據類型,這個運算符都會返回一個布爾值。它會先將這個值轉換成布爾值,而後取反,規則以下:spa

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的一段源碼:code

// Is a given value a DOM element?
    _.isElement = function(obj) {
        return !!(obj && obj.nodeType === 1);
    };

返回的值就是布爾值對象

關係運算符

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

相等操做符

相等操做符會對操做值進行隱式轉換後進行比較:blog

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,引用地址同樣,因此相等

思惟導圖

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

圖片描述

相關文章
相關標籤/搜索