在JavaScript中,如果我們有一些代碼,如javascript邏輯分配如何工作?
var a = "one";
var b = q || a;
alert (b);
邏輯運算符OR將指定的值,以B和警報將是「1」。
這僅限於作業或我們可以在任何地方使用嗎?
它似乎是一個空字符串被視爲未定義相同。這是正確的嗎?
這是如何與AND變量一起工作的?他們的組合呢?
什麼時候使用這些成語或者什麼時候不去的好例子?
在JavaScript中,如果我們有一些代碼,如javascript邏輯分配如何工作?
var a = "one";
var b = q || a;
alert (b);
邏輯運算符OR將指定的值,以B和警報將是「1」。
這僅限於作業或我們可以在任何地方使用嗎?
它似乎是一個空字符串被視爲未定義相同。這是正確的嗎?
這是如何與AND變量一起工作的?他們的組合呢?
什麼時候使用這些成語或者什麼時候不去的好例子?
爲了您q || a
,以評估a
,q
應該是一個'falsy的價值。你所做的就是所謂的「短路評估」。
回答您的問題:
的方式||
工作在JavaScript是:
true
,返回左操作數& &作品相似。
你可以使用這個在網上存在的檢查,例如:
var foo = (obj && obj.property)
將設置foo
到obj.property
如果obj
定義和「truthy」。
很好解釋! – eddy 2014-08-01 03:14:16
*「如果左操作數的計算結果爲true,則返回左操作數」*否,這是錯誤的。 * Truthy *,不是'true'。 – 2016-12-06 11:41:41
此行爲與Perl等其他腳本語言共享。邏輯OR運算符可用作指定默認值的語法簡寫形式,因爲邏輯OR運算符在遇到第一個表達式的值爲true時會停止評估其操作數:「評估第一個操作數以及是否解釋值如果不是false,則分配它,否則重複第二個操作數。「
我發現我經常使用這種行爲來指定函數參數的默認值。例如。
function myFunction(foo, bar) {
var fooValue = foo || "a";
// no need to test fooValue -- it's guaranteed to be defined at this point
}
我不太確定我按照你的問題。您可以在任何可以使用表達式的地方使用表達式,並且兩個表達式上的邏輯運算符會生成表達式。
alert(q||a);
alert(true||false);
var x=5;
var y=0;
if (y!=0 && x/y>2) { /*do something*/ }
最後一位很有用。像大多數語言一樣,Javascript'短路'AND和OR。如果AND的第一部分爲假,則它不會評估第二位 - 從而爲您節省0分。如果OR的第一部分是真的,它不會評估第二部分。
但是,您可以在任何可以使用表達式的地方使用布爾運算符。
Javascript通過真實/虛假評估邏輯。諸如(false
,「」,null,undefined
,0
,-0)的值被評估爲邏輯假。
與懶惰的評價結合這「或者」現在操作都是從left to right
和計算一次true
發現停止。因爲在你的例子中,真值並不是字面上的布爾值,所以返回值。
在這種情況下:
x = 0; y = 5; alert(y || x)/*returns 5*/; alert(x || y)/*also returns 5*/;
這也可以是其他對象。
functionThatReturnsTrue() || functionThatDoesSomething();
恕我直言 - 不要用於布爾類型分配。它可能會令人困惑。 As undefined!== false,即false本身就是一個值。
E.g.如果妳想要一個字段值從一個對象複製當且僅當該字段定義
var bar.value = false;
var foo = true;
var foo = bar.value || foo; // ==> should be false as bar.value is defined
對於布爾類型分配,U確實應該使用
var foo = (bar.value !== undefined) ? bar.value : foo;
參見[JavaScript或(||)變量賦值說明 ](http://stackoverflow.com/questions/2100758/javascript-or-variable-assignment-explanation)和[在Javascript中,當變量聲明中有邏輯運算符時,這意味着什麼? ](http://stackoverflow.com/questions/3088098/in-javascript-what-does-it-mean-when-there-is-a-logical-operator-in-a-variable-d)。 – 2010-12-15 03:40:23
請勿使用它。這是一種愚蠢的語法結構,它不直觀,在閱讀代碼時會減慢很多人的速度。 – 2010-12-15 03:51:25
@MK,不排除一個常見的構造,僅僅因爲那些還沒有認識JavaScript的人不熟悉它。 – 2010-12-15 04:03:15