資料轉換 運算子的題

2022-08-20 21:21:10 字數 2179 閱讀 4887

1. console.log(()?true:false)   和true比較,相當於boolean()的結果與true比較,boolean() = true

console.log((==false?true:false))  ==比較時,其他型別與布林值進行==比較時,先將布林值強制轉換為對應數字,再將轉換為數字 ==false -> ==number(false)->==0 ->number()==0 -> 0==0 true

console.log(({}==false?true:false)) number型別轉換的引數是物件則返回nan, number({})=nan nan == 0 返回false

boolean返回false的情況:

boolean(undefined)

boolean(null)

boolean(0)

boolean(nan)

boolean("") (中間不能有空格 有空格返回true)

number(nan) - nan

number(undefined) - nan

number({}) - nan

number(null) - 0

number() - 0

number("") - 0

== 比較運算子,兩邊都要轉成number(),發生隱式轉換

!邏輯運算子、?:三元運算子(判斷?前的是否為true),會轉換成boolean() 

任何值和字串相加,先轉為字串再拼串,其他值+空串「」 就可以實現string( )效果 (隱式型別轉換),除了加法,- * /都轉為number運算,其他值-0 *1 /1就能隱式轉換為number型別

2. 假設有如下**,那麼a(10)的返回結果是?( )

1<<4 = 01左移4位10000,10000=16,16-1=15,a=10=1010,15=1111, 1010^1111=0101=5

3. ① [1,2,-3].reduce((a,b) => a-b,0)

reduce()函式用法:array.reduce(function(total,currentvalue,currentindex,arr),initialvalue),方法接收乙個函式作為累加器,陣列中的每個值(從左到右)開始縮減,最終計算為乙個值;function的後兩個引數可選,前兩個為必須,記住!第乙個引數是累積的值,第二個是陣列當前計算的值!

本題中reduce的初始值為0,接收的方法為function(a,b),a為累加器累計**返回的值,b為陣列中的每一項元素,所以計算過程為:0-1 = -1 -> 此時a=-1 -> -1-2 = -3 -> 此時a=-3 -> -3-(-3) =0

4. +[ ] : +號 一元預算符,只需要1個運算元,直接轉化為number,是隱式轉換

+[ ] typeof(+)-> number 輸出0      typeof(+{}) -> number 輸出nan

typeof(1+) -> string  輸出1     typeof(1+{}) ->string 輸出1   為什麼直接計算是string型別。。。?

typeof("1"+)-> string  輸出1    typeof("1"+{}) ->string 輸出1

總結隱式轉換:

1. 任何值與字串相加,先轉為字串再拼串,其他值+「」空串可以實習string()的效果

2. + 取正好,不會對數字產生影響,對其他型別取+ 直接轉換為number

3. 對非布林值二次取反,隱式轉換為該值的布林值(非布林值與或非,都轉換為布林值再運算)

5. 1&2 = 0/1&1 = 1/2&2=2/3&3=3 兩邊相同才能與,不然都為0

js的邏輯位運算子& |  ^ ~ 是對兩個二進位制數進行逐位比較

運算子 轉換

1.算數運算子 l 自身加一 有前加和後加 l 自身減一 有前減和後減 l 前加加 先加一再運算 l 後加加 先取原值,運算後在加1 l 前減減 先自身減1再運算 l 後減減 先取原值運算後再減一 例 int num 10 l int number 10 num 先取原值,參與運算最後在加1。例如 ...

C 運算子過載轉換運算子

為什麼需要轉換運算子?大家知道對於內建型別的資料我們可以通過強制轉換符的使用來轉換資料,例如 int 2.1f 自定義類也是型別,那麼自定義類的物件在很多情況下也需要支援此操作,c 提供了轉換運算子過載函式 它使得自定義類物件的強轉換成為可能。轉換運算子的生命方式比較特別,方法如下 operator...

強制轉換運算子和型別強制轉換運算子

char b a cout int b endl 在 c 中,型別的名字 包括類的名字 本身也是一種運算子,即型別強制轉換運算子。型別強制轉換運算子是單目運算子,也可以被過載,但只能過載為成員函式,不能過載為全域性函式。經過適當過載後,型別名 物件這個對物件進行強制型別轉換的表示式就等價於物件.op...