+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)