国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

PAMPANG / 1341人閱讀

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

typeof 操作符(還有 instanceof)可能是 Javascript 設計中最大缺陷,因為它幾乎是完全破損的。由于 typeof 用法與調用函數的語法相似,因此常被誤以為是函數調用,實際上并不存在名為 typeof 的函數,typeof 只是一個操作符而已。
盡管 instanceof 仍然還有少數的應用場景,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 操作符的結果。而 Class 列則表示對象內部的 [[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 被調用,this 被設置指向需要獲取其 [[Class]] 屬性值的對象。

  

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

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

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

總結

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

  

《如何正確判斷js數據類型》

參考

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78102.html

相關文章

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

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

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

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

    lansheng228 評論0 收藏0
  • 細說 Javascript 數組) : 數組的構造函數和常見操作

    摘要:數組的構造函數由于數組的構造函數在處理參數時的不確定性,因此強烈建議使用符號來創建一個新數組。總結綜上所述,我們應該盡量使用來創建新函數,而不是數組的構造函數,這樣代碼將有更好的可讀性。 數組的構造函數 由于數組的構造函數在處理參數時的不確定性,因此強烈建議使用 [] 符號來創建一個新數組。 [1, 2, 3]; // Result: [1, 2, 3] new Array(1, ...

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

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

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

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

    chengtao1633 評論0 收藏0

發表評論

0條評論

PAMPANG

|高級講師

TA的文章

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