显式强制类型转换
1. 日期顯式轉換為數字+new Date; //1478845373322 javascript有個奇特的語法,即構造函數沒有參數時可以不用帶()。不過最好還是使用ES5中新加入的?靜態方法:Date.now()。2. ~運算符按位運算符只適用于32位整數,運算符會強制操作數使用32位格式。這是通過抽象操作ToInt32實現的。ToInt32 首先執行ToNumber 強制類型轉換,比如“123”會先轉換為123,然后再執行ToInt32。
按位運算符有6個:?& 按位與?? ??| 按位或 ? ??^ 按位異或?? ??~ 取反?? ??>> 右移?? ??<< 左移
但這嚴格來說并不是強制類型轉換(因為返回值類型并沒有發生變化),但按位運算符(例如 | 或~)和某些數字一起使用時會產生類似強制類型轉換的效果,返回另外的數字。例如 | 運算符 0|x僅執行ToInt32轉換。但以下特殊字符無法以32格式呈現,因此ToInt32返回0。0|-0;//0 0|NaN;//0 0|Infinity;//0 0|-Infinity;//0 ~ 首先將值強制類型轉換為32位數字,然后執行按位運算符操作“非”(對每個字符進行反轉)。另外一種說法,源自早期的計算機科學和離散數學:~返回2的補碼。~x等同于 -(x+1);~5; //-6 3. 字位截除 ~~~~中第一個 ~ 執行ToInt32并反轉字位,然后第二個 ~ 再進行一次字位反轉,將所有的字位反轉為原值,最后得到的仍是ToInt32的結果。~~只適用于32位數字,且它對負數的處理與Math.floor(...)不同。Math.floor(-88.9); //-89 ~~-88.9; //-88 ~~可以將值截除為一個32位整數,x|0也可以。但最好是使用~~,出于運算符優先級的考慮。4. 顯式解析數字字符串解析允許字符串中含有非數字字符串,從左到右解析,遇到非數字字符則停止,而轉換不允許出現非數字字符,否則會失敗并返回NaN。var a="56"; var b="56px"; Number(a); //56 parseInt(a); //56 Number(b); //NaN parseInt(b); //56 ES5之前的parseInt32(...) 有一個坑,如果沒有第二個參數來指定轉換的基數,它會根據字符串的第一個字符來自行決定基數。如果第一個字符是x或者X,則轉換為十六進制數字。如果是0,則轉換為八進制數字。ES5開始,parseInt32(...) 默認轉換為十進制。5. 顯式轉換為布爾值 ?Boolean(...)一元運算符!顯式的將值類型轉換為布爾值,但同時會將真值轉換為假值,假值轉換為真值。所以顯式強制類型轉換為布爾值常用的做法是!!,第二個!會將結果反轉為原值。var a="0"; var b=[]; var c={}; !!a; //true !!b; //true !!c; //true 下面這段代碼:var a=56; var b=a?true:false; a 首先被強制轉換為布爾值才能進行條件判斷,成為“顯式的隱式”。建議使用Boolean(a)和!!a來進行顯式的強制類型轉換。
來自為知筆記(Wiz)
按位運算符有6個:?& 按位與?? ??| 按位或 ? ??^ 按位異或?? ??~ 取反?? ??>> 右移?? ??<< 左移
但這嚴格來說并不是強制類型轉換(因為返回值類型并沒有發生變化),但按位運算符(例如 | 或~)和某些數字一起使用時會產生類似強制類型轉換的效果,返回另外的數字。例如 | 運算符 0|x僅執行ToInt32轉換。但以下特殊字符無法以32格式呈現,因此ToInt32返回0。
來自為知筆記(Wiz)
轉載于:https://www.cnblogs.com/cheemon/p/6054550.html
總結
- 上一篇: code vs1517 求一次函数解析式
- 下一篇: Linux下安装禅道