首頁  >  文章  >  web前端  >  運算子&&的三個不同層次_基礎知識

運算子&&的三個不同層次_基礎知識

WBOY
WBOY原創
2016-05-16 17:38:211722瀏覽

運算子可以從三個不同的層次來理解。

第一層理解

當運算元都是布林值時,「&&」會對兩個值執行布林與(AND)操作。

複製程式碼 程式碼如下:

x==0 && y==0 //當x和y都是0時,才回傳true

關係運算子的優先順序比」&&」要高。

第二層理解

”&&「可以對真值和假值進行布林與(AND)操作。 (假值有false、null、undefined、0、NaN和”“)。在JS中任何希望使用布林值的地方,表達式和語句都會將其當做真值或假值來對待,因此實際上」&&」並不總是傳回true和false。

複製程式碼 程式碼如下:

null && true // =>nullull: 左運算元為假值,並將其傳回,整個表達式為假
true && (5 - 3) // =>2: 左操作數為真,計算右操作數,並將其結果傳回

第三層理解

當運算子要傳回一個真值或假值時,根據左運算元的值會遇到兩種運算情況:運算子先計算左運算元的值,如果計算結果是假值,那麼整個表達式的結果一定也是假值,此時”&&“簡單的返回左操作數的值,而不會對右操作數進行計算。如果左操作數是真值,」&&「將計算右操作數的值並將其傳回作為整個表達式的計算結果。

複製程式碼 程式碼如下:

var o = {x:1};


var o = {x:1};
var o = {x:1};

var o = {x:1};

var o = {x:1};var o = {x:1};
var o = {x:1};
;
;
;
;;

; var p = null;

o && o.x; // =>1 o是真值,傳回o.x的值

p && p.y; // =>null: p是假值,將其傳回,而不去計算p.y

」&&「的行為有時稱作」短路「,我們將會看到很多程式碼利用了這一特性進行有條件地執行程式碼。例如下面兩行程式碼是完全等價的:

複製程式碼
程式碼如下:


if(a == b) stop(>
if(a == b) stop(>

if(a == b) stop(>

if(a == b) stop(>

if(a == b) stop(>if(a == b) stop(>if(a == b) stop(>
if(a == b) stop(>
(a == b) && stop();// 與上面語句等價



知識延伸
運算子「||」和」&&」一樣也有一些複雜的行為。

用來從一組備選表達式中選出第一個真值表達式:

複製程式碼

程式碼如下:// 先檢查a是否為真值,如果是,返回a,否則和a處理方式相同地處理b// 如果b是真值返回b,否則返回5var max = a || b || 5; 這種用法在函數中可以用來給參數預設值: 複製程式碼 程式碼如下:function copy(o, p) { = p || {}; // 如果沒有向參數p傳遞對象,就使用新建立的對象// ...} 運算子優先權 同一優先權的運算符,運算次序由結合方向決定。 簡單記就是:! > 算術運算子 > 關係運算子 > && > || > 賦值運算子  
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn