[英]Test typeof in javascript along with number variable
為什么如果我寫下面的腳本變量 f 的值是 2016 ?
var year = 2016;
var g = 'foo';
var f = typeof g != 'undefined' && year;
因為&&
是 JavaScript 中一個非常有趣的運算符:與其他一些語言不同,它不會導致true
或false
(必然)。 相反, &&
的結果是它的左操作數的值,如果它是假的, 1或者它的右操作數的值,否則。
它是這樣工作的:
typeof g != 'undefined'
)。year)
並將其作為操作的結果。按照您的示例進行操作:
typeof g != 'undefined'
。 由於typeof g
是'string'
和'string' != 'undefined'
,這是true
。true
不是 false 所以我們不會停止。year
並將其作為結果。 所以f
得到 2016 ( year
的值)分配給它。
&&
有一個同樣有趣的表親||
,我寫了一篇關於這種行為的博客文章: JavaScript's Curiously-Powerful OR Operator (||)
1假值是當被視為布爾值時強制為false
值。 假值是0
、 ""
、 NaN
、 null
、 undefined
,當然還有 `false。
2真值是不為假的值(當它們像布爾值一樣處理時會強制為true
)。
注意:當您使用它們以布爾值的行為方式是不是如果你把它們比作布爾他們的行為方式相同。 "foo"
是一個真值,但"foo" == true
和"foo" === true
都是false
。
是的, f
的值將是2016
。
讓我們分解你的代碼。
typeof g != 'undefined' //returns true
在邏輯運算符的情況下,將返回最終值。 在你的情況下
true && year //returns 2016
當&&
滿足時,最終值(年)將返回 b 並分配給f
&& 運算符總是返回它測試的最后一個東西,因為在你的情況下是 year ,它將返回year
的值。
&& 從不將變量轉換為布爾值,它只檢查它是否為真值。
&&
運算符計算其左參數如果為假,否則計算其右參數。
由於g
不是未定義, typeof g != 'undefined'
是真實的, typeof g != 'undefined' && year
的計算結果為year
是2016年
(這與其他一些語言不同,其中諸如&&
或||
類的邏輯運算符的結果將始終是布爾值,但 JavaScript 並非如此。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.