成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

細說 Javascript 類型篇(二) : typeof 操作符

PAMPANG / 1353人閱讀

摘要:操作符還有可能是設(shè)計中最大缺陷,因為它幾乎是完全破損的。由于用法與調(diào)用函數(shù)的語法相似,因此常被誤以為是函數(shù)調(diào)用,實際上并不存在名為的函數(shù),只是一個操作符而已。而列則表示對象內(nèi)部的屬性。屬性文檔中明確地給出了獲得屬性的途徑,就是使用。

typeof 操作符(還有 instanceof)可能是 Javascript 設(shè)計中最大缺陷,因為它幾乎是完全破損的。由于 typeof 用法與調(diào)用函數(shù)的語法相似,因此常被誤以為是函數(shù)調(diào)用,實際上并不存在名為 typeof 的函數(shù),typeof 只是一個操作符而已。
盡管 instanceof 仍然還有少數(shù)的應(yīng)用場景,typeof 則只有一個實際的用途,但這個用途不能用來檢測對象的類型。

類型表格
Value               Class      Type
-------------------------------------
"foo"               String     string
new String("foo")   String     object
1.2                 Number     number
new Number(1.2)     Number     object
true                Boolean    boolean
new Boolean(true)   Boolean    object
new Date()          Date       object
new Error()         Error      object
[1,2,3]             Array      object
new Array(1, 2, 3)  Array      object
new Function("")    Function   function
/abc/g              RegExp     object (function in Nitro/V8)
new RegExp("meow")  RegExp     object (function in Nitro/V8)
{}                  Object     object
new Object()        Object     object

在上述表格中,Type 列表示 typeof 操作符的結(jié)果。而 Class 列則表示對象內(nèi)部的 [[Class]] 屬性。
為了獲得 [[Class]] 屬性,我們需要使用 Object.prototypetoString 方法。

Class 屬性

文檔中明確地給出了獲得 [[Class]] 屬性的途徑,就是使用 Object.prototype.toString。

function is(type, obj) {
    var clas = Object.prototype.toString.call(obj).slice(8, -1);
    return obj !== undefined && obj !== null && clas === type;
}

is("String", "test"); // true
is("String", new String("test")); // true

上例中,Object.prototype.toString 被調(diào)用,this 被設(shè)置指向需要獲取其 [[Class]] 屬性值的對象。

  

文檔定義: [[Class]] 屬性的值只可能是下列字符串: Arguments, Array, Boolean, Date, Error, Function, JSON, Math, Number, Object, RegExp, String
nullundefined 調(diào)用 Object.prototype.toString 方法時, 其返回值將由 Object 變成了 NullUndefined。

測試變量是否定義
typeof foo !== "undefined"

上述語句將會測試變量 foo 已定義與否,如果未定義而引用 foo 將會拋出 ReferenceError 錯誤,這實際上是 typeof 用處最大的地方。

總結(jié)

為了檢測一個對象的類型,最可靠的方法就是使用 Object.prototype.toString,正如第一個表格上的內(nèi)容,typeof 操作符并不能返回確切的對象類型,但是我們可以使用 typeof 操作符經(jīng)常會被用來判斷變量是否定義。
其實 typeof 操作符還可以被用來測試變量是否為函數(shù),@humphry 前輩的回答進一步豐富了 typeof 的用途:

  

《如何正確判斷js數(shù)據(jù)類型》

參考

http://bonsaiden.github.io/JavaScript-Garden/#types.typeof

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78102.html

相關(guān)文章

  • 細說 Javascript 類型(三) : instanceof 作符

    摘要:的操作符可以用來比較兩個操作數(shù)的構(gòu)造函數(shù)。這是因為它們的構(gòu)造函數(shù)不可能會是同一個對象??偨Y(jié)綜上所述,我們知道操作符最合適的使用壞境是比較兩個相同上下文背景下的自定義對象的構(gòu)造函數(shù),正如上篇介紹的操作符,其他壞境下使用作用不大。 Javascript 的 instanceof 操作符可以用來比較兩個操作數(shù)的構(gòu)造函數(shù) constructor。但這個只有在比較自定義對象才有意義。當用來比較 ...

    tylin 評論0 收藏0
  • 細說 Javascript 對象) : 原型對象

    摘要:并沒有類繼承模型,而是使用原型對象進行原型式繼承。我們舉例說明原型鏈查找機制當訪問一個對象的屬性時,會從對象本身開始往上遍歷整個原型鏈,直到找到對應(yīng)屬性為止。原始類型有以下五種型。此外,試圖查找一個不存在屬性時將會遍歷整個原型鏈。 Javascript 并沒有類繼承模型,而是使用原型對象 prototype 進行原型式繼承。 盡管人們經(jīng)常將此看做是 Javascript 的一個缺點,然...

    lansheng228 評論0 收藏0
  • 細說 Javascript 數(shù)組) : 數(shù)組的構(gòu)造函數(shù)和常見操作

    摘要:數(shù)組的構(gòu)造函數(shù)由于數(shù)組的構(gòu)造函數(shù)在處理參數(shù)時的不確定性,因此強烈建議使用符號來創(chuàng)建一個新數(shù)組??偨Y(jié)綜上所述,我們應(yīng)該盡量使用來創(chuàng)建新函數(shù),而不是數(shù)組的構(gòu)造函數(shù),這樣代碼將有更好的可讀性。 數(shù)組的構(gòu)造函數(shù) 由于數(shù)組的構(gòu)造函數(shù)在處理參數(shù)時的不確定性,因此強烈建議使用 [] 符號來創(chuàng)建一個新數(shù)組。 [1, 2, 3]; // Result: [1, 2, 3] new Array(1, ...

    kaka 評論0 收藏0
  • 聽飛狐聊JavaScript設(shè)計模式系列01

    摘要:前言大家好,小弟飛狐,愛學(xué)習(xí),愛裝逼,樂于分享,初來乍到,請多多關(guān)照。特別注意一下,函數(shù)在中是對象,不是一種數(shù)據(jù)類型,這可是世界的一等公民。和,和的關(guān)系又很曖昧,后面細說,要不然會暈菜?;緮?shù)據(jù)類型,,,,,這五種基本數(shù)據(jù)類型是按值訪問的。 前言 大家好,小弟飛狐,愛學(xué)習(xí),愛裝逼,樂于分享,初來乍到,請多多關(guān)照(~ o ~)~zZ。出道幾年,對JavaScript情有獨鐘,聊技術(shù)之前,...

    CHENGKANG 評論0 收藏0
  • 細說 Javascript 類型(四) : 類型轉(zhuǎn)換

    摘要:因為是弱類型語言,所以它會在任何可能的情形下對變量進行強制類型轉(zhuǎn)換。內(nèi)置類型的構(gòu)造函數(shù)調(diào)用內(nèi)置類型的構(gòu)造函數(shù)時,是否使用關(guān)鍵字將表現(xiàn)得大不相同。傳遞字面值或非對象值也會造成強制類型轉(zhuǎn)換的現(xiàn)象。最好的方法就是顯示地將值轉(zhuǎn)換為,或三種類型之一。 因為 Javascript 是弱類型語言,所以它會在任何可能的情形下對變量進行強制類型轉(zhuǎn)換。 // These are true new Num...

    chengtao1633 評論0 收藏0

發(fā)表評論

0條評論

PAMPANG

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<