02 強制類型轉(zhuǎn)換

4.1 值類型轉(zhuǎn)換

類型轉(zhuǎn)換發(fā)生在靜態(tài)類型語言的編譯階段,而強制類型轉(zhuǎn)換則發(fā)生在動態(tài)類型語言的運行時(runtime)

4.3 顯式強制類型轉(zhuǎn)換

var c = "3.14";
var d = +c;

d;  // 3.14

一元運算符 + 的另一個常見用途是將日期Date對象強制類型轉(zhuǎn)換為數(shù)字

var d = new Date( "Mon, 18 Aug 2014 08:53:06 CDT" );
+d;   // 1408369986000

我們常用下面的方法來獲得當前的時間戳:

var timestamp = +new Date();

不過最好還是使用ES5的Date.now()

var timestamp = Date.now();

應使用Date.now()來獲得當前的時間戳抬纸,使用new Date().getTime() 來獲得指定時間的時間戳茄厘。

奇特的 ~ 運算符

在2.3.5節(jié)中隆夯,講過字位運算符只適用于32位整數(shù)噪沙,運算符會強制操作數(shù)使用32位格式。這是通過抽象操作ToInt32來實現(xiàn)的哄辣。

ToInt32 首先執(zhí)行 ToNumber 強制類型轉(zhuǎn)換请梢,比如"123" 會先被轉(zhuǎn)換為123赠尾,然后再執(zhí)行ToInt32.

雖然嚴格說來并非強制類型轉(zhuǎn)換(因為返回值類型沒有發(fā)生變化),但字位運算符(如 | 和 ~)和某些特殊數(shù)字一起使用時會產(chǎn)生類似強制類型轉(zhuǎn)換的效果毅弧,返回另一個數(shù)字气嫁。

例如| 運算符的空操作 0 | x,它僅執(zhí)行 ToInt32 轉(zhuǎn)換

0 | -0;  // 0
0 | NaN;  // 0
0 | Infinity;  // 0
0 | -Infinity;  // 0

以上這些特殊數(shù)字無法以32位格式呈現(xiàn)(因為它們來自64位 IEEE 754 標準)夹纫,因此ToInt32 返回0.

在回到 ~ 峡谊。它首先將值強制轉(zhuǎn)換為 32 位數(shù)字患久,然后執(zhí)行字位操作 “非”(對每一個字位進行反轉(zhuǎn))

~x 大致等同于 -(x+1)。

~42 ;   // -(42+1) ==> -43

在 -(x+1)中唯一能得到0(或嚴格說是 -0)的x 值是 -1梯影。也就是說如果 x 為 -1 時,~ 和一些數(shù)字值在一起會返回假值0庶香,其他情況則返回真值甲棍。

-1是個“哨位值”,JS中字符串的indexOf() 方法也遵循這一慣例赶掖,該方法在字符串中搜索指定的子字符串感猛,如果找到就返回子字符串所在的位置,否則返回 -1奢赂。

~ 和 indexOf() 一起了將結(jié)果強制類型轉(zhuǎn)換為真/假值:

var a = "Hello World";
~a.indexOf( "lo" );   // -4   真值

if( ~a.indexOf( "lo" ) ){   // true
    // 找到匹配
}

~a.indexOf( "ol" );  // 0 假值
!~a.indexOf( "ol" );  // true

if( !~a.indexOf( "ol" ) ) {    true
    // 沒找到匹配
}

如果indexOf() 返回 -1陪白,~將其轉(zhuǎn)換為假值0, 其他情況一律轉(zhuǎn)換為真值

4.3.2 顯式解析數(shù)字字符串

var a = "42";
var b = "42px";
Number ( a );   // 42
parseInt( a );   // 42

Number( b );  // NaN
parseInt( b );  // 42

ES5之前parseInt() 需將第二個參數(shù)設為10呈驶,即可避免自行決定基數(shù)拷泽。按10進制數(shù)。

4.3.3 顯式轉(zhuǎn)換為布爾值

使用 Boolean( a ) 和 !!a 來進行強制類型轉(zhuǎn)換

4.4 隱式強制類型轉(zhuǎn)換

隱式強制類型轉(zhuǎn)換的作用是減少冗余袖瞻,讓代碼更簡潔司致。

4.4.2 字符串和數(shù)字之間的隱式強制類型轉(zhuǎn)換

簡單來說,如果 + 的其中一個操作數(shù)是字符串聋迎,則執(zhí)行字符串拼接脂矫,否則執(zhí)行數(shù)字加法。

4.4.5 || 和 &&

在JS中它們返回的并不是布爾值霉晕,它們返回的值是兩個操作數(shù)中的一個(且僅一個)庭再。
默認值通過 a = a || "hello"
守護運算符通過 a && foo(); 即第一個操作數(shù)為真值時,則返回第二個操作數(shù)的值牺堰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拄轻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伟葫,更是在濱河造成了極大的恐慌恨搓,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斧抱,居然都是意外死亡常拓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門辉浦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弄抬,“玉大人,你說我怎么就攤上這事宪郊〉嗨。” “怎么了?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵废膘,是天一觀的道長竹海。 經(jīng)常有香客問我,道長丐黄,這世上最難降的妖魔是什么斋配? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮灌闺,結(jié)果婚禮上艰争,老公的妹妹穿的比我還像新娘。我一直安慰自己桂对,他們只是感情好甩卓,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蕉斜,像睡著了一般逾柿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宅此,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天机错,我揣著相機與錄音,去河邊找鬼父腕。 笑死弱匪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的璧亮。 我是一名探鬼主播萧诫,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枝嘶!你這毒婦竟也來了帘饶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤群扶,失蹤者是張志新(化名)和其女友劉穎尖奔,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穷当,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡提茁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了馁菜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茴扁。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖汪疮,靈堂內(nèi)的尸體忽然破棺而出峭火,到底是詐尸還是另有隱情,我是刑警寧澤智嚷,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布卖丸,位于F島的核電站,受9級特大地震影響盏道,放射性物質(zhì)發(fā)生泄漏稍浆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一猜嘱、第九天 我趴在偏房一處隱蔽的房頂上張望衅枫。 院中可真熱鬧,春花似錦朗伶、人聲如沸弦撩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽益楼。三九已至,卻和暖如春点晴,著一層夾襖步出監(jiān)牢的瞬間感凤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工觉鼻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俊扭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓坠陈,卻偏偏與公主長得像萨惑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子仇矾,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

推薦閱讀更多精彩內(nèi)容