亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么('0'?'a':'b')的行為不同于('0'== true?'a':'b')

為什么('0'?'a':'b')的行為不同于('0'== true?'a':'b')

元芳怎么了 2019-11-27 10:57:10
為什么以下兩個語句的結果不同?('0' ? 'a' : 'b') /* -> 'a' */('0' == true ? 'a' : 'b') /* -> 'b' */jsFiddle測試用例編輯:我應該補充一點,我懷疑將“ 0”第一條語句強制轉換為要比較的布爾值-這應該與“'0'== true”完全相同,顯然這是不正確的。
查看完整描述

3 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超5個贊

首先,為了完整性:


('0' ? 'a' : 'b') 

之所以為'a',是因為它'0'是一個非空字符串,其總值為true:


字符串:如果參數為空字符串(其長度為零),則結果為false;否則為false。否則結果為true。


現在到'0' == true。


這里將進行兩次類型轉換。我們可以在規范的第11.9.3節“抽象平等比較算法”中遵循這一要求。


操作數表示為x和y(x == y)。


在我們的例子中,x是一個字符串('0')和y一個布爾值(true)。因此,執行步驟7:


如果Type(y)為布爾型,則返回比較結果x == ToNumber(y)。


將布爾值轉換為數字時,將進行以下轉換:


布爾值:如果參數為true,則結果為1。如果參數為false,則結果為+0。


現在我們有


'0' == 1

符合步驟5中的條件:


如果Type(x)為String,Type(y)為Number,則返回比較結果ToNumber(x)== y。


如何將字符串轉換為數字更為復雜,但是當然也可以在規范中找到。


所以最后的比較是


0 == 1

這是false(步驟1. a。vi。)


查看完整回答
反對 回復 2019-11-27
?
紫衣仙女

TA貢獻1839條經驗 獲得超15個贊

主要是因為JavaScript在真實性方面相當不一致。但是答案是:

  1. 在這種情況下,“ 0”直接轉換為布爾值,而“ 0”(非空字符串)為true。

  2. 在這種情況下,不會進行任何轉換;字符串不等于布爾值。


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 748 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號