webrtc底層一對一鏈接過程探索(二)

1、鏈接過程繼續解讀-----fun32解讀node

1.1 fun32.02web

"undefined" != typeof cordova && (N = !0, D = !0), 
navigator && 
navigator.userAgent && 
-1 !== navigator.userAgent.indexOf("Crosswalk") &&
(N = !0, D = !0); 
console.info('fun32.02==>2252==>2252');

       注:關於函數中的逗號表達式,第一個逗號表達式執行完,無論它成立不成立,都要執行第二字逗號表達示,以最後一個逗號表達式生成的結果或真假爲準;但在同一個逗號表達式中,若是是&&鏈接的,若是第一個("undefined" != typeof cordova)不成立,就不會執行第二個((N = !0, D = !0))了。數組

1)第一行代碼瀏覽器

"undefined" != typeof cordova && (N = !0, D = !0),框架

注:"undefined" != typeof cordova這一句爲假,後面的(N = !0, D = !0)不執行了,由於&&鏈接的表達式,必須都爲真,整體的結果才爲真。這一行,包括如下的幾行,是判斷一對一的客戶端用沒用手機,而且用沒用crosswalk進行包裹,就是說webrtc代碼不只能夠跑在瀏覽器上,也能夠跑在crosswalk框架上。函數

2)第二至四行代碼spa

navigator && 
navigator.userAgent && 
-1 !== navigator.userAgent.indexOf("Crosswalk") &&
(N = !0, D = !0); 

a.) navigator以下:3d

b.) navigator.userAgent以下:code

navigator.userAgent:  Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36

c.) navigator.userAgent.indexOf("Crosswalk")以下:cordova

navigator.userAgent.indexOf("Crosswalk"):  -1

注:沒查到Crosswalk,說明用的不是Crosswalk。這個判斷爲false,再也不往下執行。

1.2  fun32.03

var V = !N && (I || L);

注:V是false表示PC端不是IE瀏覽器,true表示PC端是IE瀏覽器。

 

1.3 fun32.04

V &&

"undefined" != typeof URL &&

(URL.createObjectURL = function() {});

1)V

V是false

2)typeof URL

URL是個函數

3)URL.createObjectURL

URL.createObjectURL是個函數

總的截圖以下:

注:總的來講,這一行仍是false,由於第一個就是false。

1.4 fun32.05

    var W = (!!(window.process &&

                "object" == typeof window.process &&

                window.process.versions &&

                window.process.versions["node-webkit"]), 50),

        B = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);

console.info('fun32.05==>2263==>2263');

1)變量W

    var W = (!!(window.process &&

                "object" == typeof window.process &&

                window.process.versions &&

                window.process.versions["node-webkit"]), 50),

注:W裏面是個逗號表達式,!!通常用來將後面的表達式強制轉換爲布爾類型的數據(boolean),也就是隻能是true或者false;

var a;

var b=!!a;

a默認是undefined。!a是true,!!a則是false,因此b的值是false,而再也不是undefined,也非其它值。

2)變量B

B = navigator.userAgent.match(/Chrom(e|ium)\/([0-9]+)\./);

注:B能匹配出三個變量。

1.5 fun32.06

D && B && B[2] && (W = parseInt(B[2], 10));

1)D

D:用於判斷是否是谷歌瀏覽器。

2)B

B是一個數組,若是是谷歌瀏覽器,它會產生三個元素。經過運行發現:D && B=B

3)B[2]

B[2]:64,表示安裝的是64位的瀏覽器。

注:此時,走到這一步了,結果就是64,即:D && B && B[2] = B[2],這創建在D,B都成立的狀況下。

4)W = parseInt(B[2], 10)

parseInt()函數,用於解析一個字符串,並返回一個整數。

注:因此W= parseInt(B[2], 10)= parseInt(64, 10)=60+4=64

因此整個表達式的值爲64

1.6 fun32.07

    var F = 50;

    B = navigator.userAgent.match(/Firefox\/(.*)/),

    U && B && B[1] && (F = parseInt(B[1], 10)),

    window.addEventListener || (window.addEventListener = function(e, n, t) {

        e.attachEvent && e.attachEvent("on" + n, t)

    }),

    window.attachEventListener = function(e, n, t, o) {

        e.addEventListener(n, t, o)

    };

console.info('fun32.07==>2277==>2277');

1)var F = 50;

   定義一個變量F,並賦值爲50.

2)B = navigator.userAgent.match(/Firefox\/(.*)/),

   用於判斷是否爲火狐瀏覽器,輸出應該爲false爲空。截圖以下:

3)U && B && B[1] && (F = parseInt(B[1], 10)),

 U爲false,不用往下看了,由上能夠B是null,也爲假。

4)監聽

    window.addEventListener || (window.addEventListener = function(e, n, t) {

        e.attachEvent && e.attachEvent("on" + n, t)

}),

注:這是一個監聽函數,但後面不知爲何,重定義了。用到時,再說吧。

相關文章
相關標籤/搜索