国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript中一個運算符優先級問題引發的思考

zengdongbao / 1664人閱讀

摘要:中一個運算符優先級問題引發的思考題目假設已經聲明可定義為任何值。分析因為我們忽略了運算符的優先級。要知道,加號優先級高于三目運算,低于括號。為值,在里的判斷就是值。

JavaScript中一個運算符優先級問題引發的思考 題目

假設 val 已經聲明,可定義為任何值。則下面js代碼有可能輸出的結果為:

console.log("Value is " + (val != "0") ? "define" : "undefine");

A. Value is define
B. Value is undefine
C. define
D. undefine
E. Value is define 或者 Value is undefine
F. define 或者 undefine
G. 其它選項都有可能

如果是你,你會選什么呢?

可以說,大部分人都會在A、B、E中選擇,以為重點在后面的三目運算符,前面字符串原樣輸出就是了。但是答案是 C

分析

因為我們忽略了運算符的優先級。要知道,加號 + 優先級高于三目運算 ? :,低于括號 ()。不管 (val != "0") 的真假,"Value is " + (val != "0") 是一個字符串并且轉換成布爾值一定是 true

下面我們來具體分析里面的每一部分。

先來看看括號里面的情況,題目已經說了:

假設 val 已經聲明,可定義為任何值。

所以,(val != "0") 的值可以是 true 或者 false ,那么這個就涉及到JavaScript的一些隱式轉換邏輯。

眾所周知,

0 == "0"  // true
null == undefined  // true
false == "0"  // true
常用的隱式轉換邏輯
x+""  //等價于String(x)

+x  //等價于Number(x),也可以寫成x-0

!!x  //等價于Boolean(x)
附錄 - Javascript類型轉換

回到本題條件永遠為真,并且只輸出 "define"

Boolean

還有一個需要注意的地方

下面程序的顯示結果是?

var x = new Boolean(false);
if (x) {
  alert("hi");
}
var y = Boolean(0);
if (y) {
  alert("hello"); 
}

x為Boolean對象,在if語句里的判斷為true,雖然x的值為false,但是作為對象,if會直接判斷為true。y為Boolean值,在if里的判斷就是false值。所以會顯示 "hi"

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88206.html

相關文章

  • 一道前端面試題引發思考

    摘要:直接開始題目是厲害了說句實話開發中誰寫成這樣保證會被打死。不過面試就是面試,有面試官的考量點。官方是這么說的。結果完美,不過小姐姐的意思是數組的方法會自動觸發數組的。 直接開始題目是 if(a==1 && a==2 && a==3){ alert(厲害了) } 說句實話開發中誰寫成這樣保證會被打死。 不過面試就是面試,有面試官的考量點。 我理解的點有兩個 1、隱式類型轉換 先說...

    gaomysion 評論0 收藏0
  • 一道三目運算測試題引發思考

    摘要:因為加法的優先級比條件運算符高,所以先運算加號,是字符串拼接,結果是非空字符串,在中字符串的布爾類型為。知識點三目運算為真執行為假執行運算優先級在中布爾類型只有以下種情況為假,其他都為真。 一、測試題 原題:以下代碼的輸出是? var val = false; alert(val is + val ? true : false); 解析: 1. 此題考察的知識點: 三目運算、**運...

    SHERlocked93 評論0 收藏0
  • 簡單說 !![]==true 與 []==true 引發思考

    摘要:簡單說中的與方法我們一句一句的看結果是邏輯非,會將操作數的布爾值求反,而就是類型轉換,將對應的類型轉換為型所以我們看一看,一次求反返回的就是,再求反返回的就是。原始值不可變更的值,包括布爾值數字和字符串。 說明 直接說出問題 !![] == true //結果是true [] == true //結果是false ![] == [] //結果是true 為什么會出現這種情...

    lbool 評論0 收藏0
  • 簡單說 !![]==true 與 []==true 引發思考

    摘要:簡單說中的與方法我們一句一句的看結果是邏輯非,會將操作數的布爾值求反,而就是類型轉換,將對應的類型轉換為型所以我們看一看,一次求反返回的就是,再求反返回的就是。原始值不可變更的值,包括布爾值數字和字符串。 說明 直接說出問題 !![] == true //結果是true [] == true //結果是false ![] == [] //結果是true 為什么會出現這種情...

    gnehc 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<