爲什麼如果我寫下面的腳本,變量f的值是2016?JavaScript中的測試類型以及數字變量
var year = 2016;
var g = 'foo';
var f = typeof g != 'undefined' && year;
爲什麼如果我寫下面的腳本,變量f的值是2016?JavaScript中的測試類型以及數字變量
var year = 2016;
var g = 'foo';
var f = typeof g != 'undefined' && year;
是的,值爲f
將是2016
。
讓我們來分解你的代碼。
typeof g != 'undefined' //returns true
在邏輯運算符的情況下,將返回最終值。在你的情況
true && year //returns 2016
由於&&
滿足,終值(年)將b返回並分配給f
的&&
運算符計算其左的說法,如果這是falsey,否則計算結果爲它的正確論點。
由於g
是不未定義,typeof g != 'undefined'
爲真,typeof g != 'undefined' && year
評估爲year
其是2016年
(這不同於一些其他語言,其中邏輯操作的像&&
或||
結果往往會出現布爾值,但JavaScript不是這種情況。)
'typeof g!=「undefined」'是真的,不是假的 –
@Bálint對不起,我在那裏做了一個錯字。謝謝! – Frxstrem
因爲&&
是JavaScript中非常有趣的操作符:與其他一些語言不同,它不會導致true
或false
(必然)。相反,&&
的結果是其左操作數的值,如果這是falsy,或其右操作數的值,否則。
它的工作原理是這樣的:
typeof g != 'undefined'
)。year)
,使該操作的結果按照它通過你的例子:
typeof g
是'string'
和'string' != 'undefined'
,那就是true
。true
不是虛假的,所以我們不會停下來。year
並做出結果。因此f
得到2016(值爲year
)分配給它。
&&
有一個同樣,有趣的表弟,||
,關於這一點我已經寫了有關此問題的博客文章:在處理時JavaScript's Curiously-Powerful OR Operator (||)
Falsy值是強制要false
值作爲布爾人。 Falsy值爲0
,""
,NaN
,null
,undefined
,當然也是「錯誤」。
Truthy值是不值falsy(當像一個布爾處理它們強制true
)。
注意:當您使用它們以布爾值的行爲方式是不他們的行爲,如果你他們比較到布爾值的方式相同。 "foo"
是一個truthy值,但"foo" == true
和"foo" === true
都是false
。
該& &運營商總是返回它測試的最後一件事情,因爲在你的情況下,今年,它會返回值year
。
& &永遠不會將變量轉換爲布爾值,它只會檢查它是否爲真值。
*「&&操作符總是返回它測試的最後一個東西」*它並不真正*測試*它的第二個操作數,然而,這是我看到的最明顯的方法之一。好一個。不得不讓它激發未來人們對此的解釋,試圖稍微調整它,而不會失去美妙的簡單。 –
@ T.J.Crowder謝謝 –
怎麼樣? 'typeof g!='undefined''將始終爲'true',您將得到'year'的值。 –
是的,但f的值是2016 –
正確。他說你會得到「年的價值」,並將年的價值設置到2016年。 – Gavin