【二十二】標(biāo)準(zhǔn)對(duì)象

在JavaScript的世界里,一切都是對(duì)象。
但是某些對(duì)象還是和其他對(duì)象不太一樣吃溅。為了區(qū)分對(duì)象的類型,我們用typeof操作符獲取對(duì)象的類型鸯檬,它總是返回一個(gè)字符串:

typeof 123;  // 'number'
typeof NaN;  // 'number'
typeof 'str';  // 'string'
typeof true;  // 'boolean'
typeof undefined;  // 'undefined'
typeof Math.abs;  // 'function'
typeof null;  // 'object'
typeof [];  // 'object'
typeof {};  // 'object'

可見决侈,number、string喧务、boolean赖歌、function和undefined有別于其他類型。特別注意null的類型是object功茴,Array的類型也是object庐冯,如果我們用typeof將無法區(qū)分出null、Array和通常意義上的object----{}

包裝對(duì)象

除了這些類型外坎穿,JavaScript還提供了包裝對(duì)象展父,熟悉Java的小伙伴肯定很清楚int和Integer這種曖昧關(guān)系。
number玲昧、boolean和string都有包裝對(duì)象栖茉。沒錯(cuò),在JavaScript中孵延,字符串也區(qū)分string類型和它的包裝類型吕漂。包裝對(duì)象用new創(chuàng)建:

var n = new Number(123);  // 123,生成了新的包裝類型
var b = new Boolean(true);  // true,生成了新的包裝類型
var s = new String('str');  // 'str'生成了新的包裝類型

雖然包裝對(duì)象看上去和原來的值一模一樣,顯示出來的也是一模一樣尘应。但他們的類型已經(jīng)變?yōu)閛bject了惶凝!所以,包裝對(duì)象和原始值用===比較會(huì)返回false:

typeof new Number(123); // 'object'
new Number(123) === 123; // false

typeof new Boolean(true); // 'object'
new Boolean(true) === true; // false

typeof new String('str'); // 'object'
new String('str') === 'str'; // false

<u>所以閑的蛋疼也不要使用包裝對(duì)象犬钢!尤其是針對(duì)string類型2韵省!玷犹!</u>
如果我們?cè)谑褂肗umber坡贺、Boolean和String時(shí),沒有寫new會(huì)發(fā)生什么情況箱舞?
此時(shí),Number()拳亿、Boolean和String()被當(dāng)做普通函數(shù)晴股,把任何類型的數(shù)據(jù)轉(zhuǎn)換為number、boolean和string類型(注意不是其包裝類型):

var n = Number('123');  // 123,相當(dāng)于parseInt()或parseFloat()
typeof n;  // 'number'

var b = Boolean('true');  // true
typeof b;  // 'boolean'

var b2 = Boolean('false');  // true! 'false'字符串轉(zhuǎn)換結(jié)果為true!因?yàn)樗欠强兆址?var b3 = Boolean('');  // false

var s = String(123.45);  // '123.45'
typeof s;  // 'string'

是不是感覺頭大了肺魁?這就是JavaScript特有的催眠魅力电湘!
總結(jié)一下,有這么幾條規(guī)則需要遵守:

  • 不要使用new Number()、new Boolean()寂呛、new String()創(chuàng)建包裝對(duì)象怎诫;
  • 用parseInt()或parseFloat()來轉(zhuǎn)換任意類型到number;
  • 用String()來轉(zhuǎn)換任意類型到string,或者直接調(diào)用某個(gè)對(duì)象的toString()方法贷痪;
  • 通常不必把任意類型轉(zhuǎn)換為boolean再判斷幻妓,因?yàn)榭梢灾苯訉慽f (myVar) { ... };
  • typeof操作符可以判斷出number、boolean劫拢、string肉津、function和undefined;
  • 判斷Array要使用Array.isArray(arr);
  • 判斷null請(qǐng)使用 myVar === null;
  • 判斷某個(gè)全局變量是否存在用typeof window.myVar === 'undefined';
  • 函數(shù)內(nèi)部判斷某個(gè)變量是否存在用typeof myVar === 'undefined'舱沧。

最后有細(xì)心的人指出妹沙,任何對(duì)象都有toString()方法嗎?null和undefined就沒有熟吏!確實(shí)如此距糖,這兩個(gè)特殊值除外,雖然null還偽裝成了object類型牵寺。
更有細(xì)心的人指出悍引,number對(duì)象調(diào)用toString()報(bào)SyntaxError:

123.toString();  // SyntaxError

遇到這種情況,要特殊處理一下:

123..toString();  // '123', 注意是兩個(gè)點(diǎn)缸剪!
(123).toString();  // '123'

不要問為什么吗铐,這就是JavaScript代碼的樂趣!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末杏节,一起剝皮案震驚了整個(gè)濱河市唬渗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奋渔,老刑警劉巖镊逝,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嫉鲸,居然都是意外死亡撑蒜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門玄渗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來座菠,“玉大人,你說我怎么就攤上這事藤树≡〉危” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵岁钓,是天一觀的道長升略。 經(jīng)常有香客問我微王,道長,這世上最難降的妖魔是什么品嚣? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任炕倘,我火速辦了婚禮,結(jié)果婚禮上翰撑,老公的妹妹穿的比我還像新娘罩旋。我一直安慰自己,他們只是感情好额嘿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布瘸恼。 她就那樣靜靜地躺著,像睡著了一般册养。 火紅的嫁衣襯著肌膚如雪东帅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天球拦,我揣著相機(jī)與錄音靠闭,去河邊找鬼。 笑死坎炼,一個(gè)胖子當(dāng)著我的面吹牛愧膀,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谣光,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼檩淋,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了萄金?” 一聲冷哼從身側(cè)響起蟀悦,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎氧敢,沒想到半個(gè)月后日戈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孙乖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年浙炼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唯袄。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弯屈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出恋拷,到底是詐尸還是另有隱情资厉,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布梅掠,位于F島的核電站酌住,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阎抒。R本人自食惡果不足惜酪我,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望且叁。 院中可真熱鬧都哭,春花似錦、人聲如沸逞带。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽展氓。三九已至穆趴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遇汞,已是汗流浹背未妹。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留空入,地道東北人络它。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像歪赢,于是被迫代替她去往敵國和親化戳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • 1. 本文是在學(xué)習(xí)廖雪峰先生的JavaScrip教程 后的歸納 一埋凯、標(biāo)準(zhǔn)對(duì)象 typeofJavaScript的世...
    ting723閱讀 319評(píng)論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法点楼,類相關(guān)的語法,內(nèi)部類的語法递鹉,繼承相關(guān)的語法盟步,異常的語法,線程的語...
    子非魚_t_閱讀 31,664評(píng)論 18 399
  • 這兩天放假躏结,我不是在路上却盘,就是在準(zhǔn)備去路上,雖然果斷地推掉了一些聚會(huì)媳拴,但是發(fā)燒黄橘、MC,我真心覺得身心俱疲...
    瞳小甜Rosie閱讀 253評(píng)論 0 0
  • 這篇建議如廁時(shí)翻閱屈溉。 公司廁所的廣告終于換了祠乃。 無聊時(shí),見字就讀硫戈。廁所里最常見的是文明標(biāo)語: 前進(jìn)一小步,文明一大...
    我馬虺隤閱讀 875評(píng)論 3 2
  • 落雨的空氣 溶入心里小压,無底的渴望 我又來到這里 等待人來人往變冷清 尋什么? 余下的背影椰于?失落的記憶怠益? 也許,早已...
    穎秀閱讀 306評(píng)論 0 4