js:標準對象/包裝對象

一、在JavaScript的世界里,一切都是對象。

但是某些對象還是和其他對象不太一樣。為了區(qū)分對象的類型,我們用typeof操作符獲取對象的類型,它總是返回一個字符串

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有別于其他類型?!咎貏e注意】null的類型是object,Array的類型也是object,如果我們用typeof將無法區(qū)分出null、Array和通常意義上的object——{}。

二、包裝對象

除了這些類型外,JavaScript還提供了包裝對象,熟悉Java的小伙伴肯定很清楚int和Integer這種曖昧關系。

number、boolean和string都有包裝對象。

★在JavaScript中,字符串也區(qū)分: string類型和它的包裝類型。

包裝對象用new創(chuàng)建:

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

★雖然包裝對象看上去和原來的值一模一樣,顯示出來也是一模一樣,但他們的類型已經(jīng)變?yōu)閛bject了!所以,包裝對象和原始值用===比較會返回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

所以千萬不要使用包裝對象!尤其是針對string類型?。?!

如果我們在使用Number、Boolean和String時,沒有寫new會發(fā)生什么情況?

此時,Number()、Boolean和String()被當做普通函數(shù),把任何類型的數(shù)據(jù)轉(zhuǎn)換為number、boolean和string類型(注意不是其包裝類型)

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

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

var b2 = Boolean('false'); // true! 'false'字符串轉(zhuǎn)換結(jié)果為true!因為它是非空字符串!
var b3 = Boolean(''); // false

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

★★★總結(jié)一下,有這么幾條規(guī)則需要遵守:

   1. 不要使用new Number()、new Boolean()、new String()創(chuàng)建包裝對象;

   2. 用parseInt()或parseFloat()來轉(zhuǎn)換任意類型到number;

   3. 用String()來轉(zhuǎn)換任意類型到string,或者直接調(diào)用某個對象的toString()方法;

   4. 通常不必把任意類型轉(zhuǎn)換為boolean再判斷,因為可以直接寫if (myVar) {...};

    5.typeof操作符可以判斷出number、boolean、string、function和undefined;

    6.判斷Array要使用Array.isArray(arr);

    7.判斷null請使用myVar === null;

    8.判斷某個全局變量是否存在用typeof window.myVar === 'undefined';

    9.函數(shù)內(nèi)部判斷某個變量是否存在用typeof myVar === 'undefined'。

其它注意事項:

1.任何對象都有toString()方法嗎?不是!null和undefined就沒有!確實如此,這兩個特殊值要除外,雖然null還偽裝成了object類型。

2.更細心的同學指出,number對象調(diào)用toString()報SyntaxError

123.toString(); // SyntaxError

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

123..toString(); // '123', 注意是兩個點!
(123).toString(); // '123'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內(nèi)部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,673評論 18 399
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,676評論 0 4
  • 閱讀書目:《如何閱讀一本書》 閱讀時間:30分鐘 閱讀頁數(shù):21-63 我收獲了什么: 1、閱讀有四個層次。基礎閱...
    Chloe婉閱讀 509評論 0 2
  • 秋雨賦 申歲九月,味在佳秋,霡霂霏霏,三日不絕,吾參學于金馬河畔,習圣賢之言,寐春秋之義??酂o盡之霾,著不薄之衣。...
    兔子姑娘有吉他閱讀 1,017評論 0 0

友情鏈接更多精彩內(nèi)容