Javascript運算式中連續的 和 || 之賦值區別

來源:互聯網
上載者:User

代碼如下: 複製代碼 代碼如下:function write(msg){
for(var i = 0; i < arguments.length; i ++){
document.write(arguments[i] + '<br />');
}
}
//關於 '&&'
test1 = 1 && 2 && 3 && 4;
test2 = '0' && 2 && 3 && 4;
test3 = 1 && 2 && 0 && 4;
test4 = 2 && 'i' && 'love' && 3 && 'you';
test5 = 'i' && 'hate' && 1 && 0 && 'you';
test6 = 1 && false && 'ihateyou' && '2';
test7 = 2 && true && 'ihatehateyou' && '23';
test8 = 4 && true && 'undefined' && 'true' && '1';
test9 = 4 && true && undefined && 'true' && '1';
test10 = 4 && true && 'null' && 'true' && '1';
test11 = 4 && true && null && 'true' && '1';
write(test1, test2, test3, test4, test5, test6, test7, test8, test9, test10, test11);
write('----------------------------------------------');
//關於 '||'
_test1 = 1 || 2 || 3 || 4;
_test2 = 0 || 2 || 3 || 4;
_test3 = 0 || '0' || 8 || 4;
_test4 = 2 || 'i' || 'love' || 0 || 'you';
_test5 = 0 || 'hate' || 1 || 0 || 'you';
_test6 = false || 0 || 'ihateyou' || '2';
_test7 = false || true || 'ihatehateyou' || '23';
_test8 = 0 || 0 || 'undefined' || 'true' || '1';
_test9 = 0 || 0|| undefined || 'true' || '1';
_test10 = 0 || false || 'null' || 'true' || '1';
_test11 = 0 || 0 || null || 'true' || '1';
write(_test1, _test2, _test3, _test4, _test5, _test6, _test7, _test8, _test9, _test10, _test11);

來看看輸出結果就會明白了:

關於 ‘&&'的輸出結果為:

複製代碼 代碼如下:4
4
0
you
0
false
23
1
undefined
1
null

每一行的編號對應上面的每一個 test。

關於 ‘||'的輸出結果為:

複製代碼 代碼如下:1
2
0
2
hate
ihateyou
true
undefined
true
null
true

仔細對照著看的話就會清楚一些了:

多個連續的 && 的運算式中若沒有 0, false, undefined, null 的話,它將取得最後一個“子運算式”的值,否則將運算式中的 0, false, undefined, null 返回。

多個連續的 || 的運算式將會取第一個“子運算式”的值,若為 0, false, undefined, null 中之一的話則取下一個“子運算式”的值,以此類推,直至找到不為 0, false, undefined, null 的“子運算式”,並將它作為整個運算式的值。

補充:

上面的似乎沒有考慮一種情況,就是有一個子運算式為 '' 怎麼辦呢?其實可以再換一種表述方式來描述 && 和 || 的工作方式:

對於 (...) && (...) && (...) ...

從左至右遍曆各個子運算式,並將每個子運算式進行 Boolean 的強制轉換,若出現 Boolean(子運算式) 為 false 的情況,則整個運算式的值即為此子運算式的值(0 或 false 或 undefined 或 null 或 ''),後面的子運算式不再判斷;若所有的 Boolean(子運算式) 均為 true,則整個運算式的值即為最後一個子運算式的值。

對於 (...) || (...) || (...) ...

從左至右遍曆各個子運算式,並將每個子運算式進行 Boolean 的強制轉換,若出現 Boolean(子運算式) 為 true 的情況,則整個運算式的值即為此子運算式的值,後面的子運算式不再“理會”;若 Boolean(子運算式) 為 false,則判斷後一個子運算式的 Boolean 情況,直至找到 Boolean(子運算式) 為 true 的情況;若全部的 Boolean(子運算式) 均為 false,則返回最後一個子運算式的值(0 或 false 或 undefined 或 null 或 '')。

這裡要注意:

Boolean(false) != Boolean('false'),前者為 false,而後者為 true 。

Boolean(undefined) != Boolean('undefined'),前者為 false,而後者為 true 。

Boolean(null) != Boolean('null'),前者為 false,而後者為 true 。

Boolean(0) != Boolean('0'),前者為 false,而後者為 true 。

Boolean('') == false

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.