簡體   English   中英

在javascript中測試typeof以及數字變量

[英]Test typeof in javascript along with number variable

為什么如果我寫下面的腳本變量 f 的值是 2016 ?

var year = 2016;
var g = 'foo';
var f = typeof g != 'undefined' && year;

因為&&是 JavaScript 中一個非常有趣的運算符:與其他一些語言不同,它不會導致truefalse (必然)。 相反, &&的結果是它的左操作數的值,如果它是假的1或者它的右操作數的值,否則。

它是這樣工作的:

  1. 評估左側操作數(在您的情況下, typeof g != 'undefined' )。
  2. 如果該值為falsy ,這就是操作的結果,我們到此為止。
  3. 如果該值為true ,則2評估右側操作數 ( year)並將其作為操作的結果。

按照您的示例進行操作:

  1. 評估typeof g != 'undefined' 由於typeof g'string''string' != 'undefined' ,這是true
  2. true不是 false 所以我們不會停止。
  3. 評估year並將其作為結果。

所以f得到 2016 ( year的值)分配給它。

&&有一個同樣有趣的表親|| ,我寫了一篇關於這種行為的博客文章: JavaScript's Curiously-Powerful OR Operator (||)


1值是當被視為布爾值時強制為false值。 假值是0""NaNnullundefined ,當然還有 `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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM