[英]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 在內部識別的類型,而不是會打印到控制台的類型。
進一步閱讀:
它完美地工作:
> var t = 1 == 1 ? 1 : 0;
undefined
> t
1
你可以說賦值操作的返回值是undefined
,而不是t
的值。
編輯:但實際上,如果我正確閱讀了規范,它似乎應該返回表達式的值。
正如@TJ Crowder 所提到的,似乎var
負責undefined
值。 但這並不意味着您不應該使用var
。 您編寫的代碼是 100% 正確的。
這更多地涉及語言的內部工作原理,我認為這不是您感興趣的內容。有關更多信息,請查看評論。
在舊的 javascript 解析器中,我們需要在括號中結束條件:
var t = (1 == 1) ? 1 : 0;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.