簡體   English   中英

Javascript 三元運算符和賦值

[英]Javascript ternary operator and assignment

對於這個簡單的 JavaScript 賦值語句,我得到了意想不到的結果:

var t = 1 == 1 ? 1 : 0;
undefined

我本來希望將 1 分配給 t 。 如果你這樣做,結果相同

var t = (1 == 1 ? 1 : 0);
undefined

有人可以解釋為什么這不能按預期工作嗎?

評估var t = 1 == 1 ? 1 : 0; var t = 1 == 1 ? 1 : 0; 例如,Firebug 控制台將是undefined 但是, t的值將如預期的那樣為1 嘗試在分配后輸出t

當變量聲明在單獨的行上時,Firebug打印結果:

var t;
t = 1 == 1 ? 1 : 0;

這是因為賦值操作的返回值是被賦值的值。 但是,當var關鍵字存在時,返回的是 VariableStatement 聲明的值,其行為如下:

生產VariableStatement : var VariableDeclarationList ; 評估如下:評估VariableDeclarationList 返回(正常,空,空)。

哪里Return (normal, empty, empty). 指的是 JavaScript 在內部識別的類型,而不是會打印到控制台的類型。

進一步閱讀:

http://ecma262-5.com/ELS5_HTML.htm#Section_12.2

它完美地工作:

> var t = 1 == 1 ? 1 : 0;
undefined
> t
1

你可以說賦值操作的返回值是undefined ,而不是t的值。


編輯:但實際上,如果我正確閱讀了規范,它似乎應該返回表達式的值。

正如@TJ Crowder 所提到的,似乎var負責undefined值。 但這並不意味着您不應該使用var 您編寫的代碼是 100% 正確的。

這更多地涉及語言的內部工作原理,我認為這不是您感興趣的內容。有關更多信息,請查看評論。

在舊的 javascript 解析器中,我們需要在括號中結束條件:

var t = (1 == 1) ? 1 : 0;

這段代碼工作正常:

var t = 1 == 1 ? 1 : 0;
alert (t);

檢查這里 它顯示1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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