最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談javascript的數(shù)據(jù)類型檢測

 更新時間:2010年07月10日 01:40:44   作者:  
剖析一下javascript的數(shù)據(jù)類型。這一次我們只簡單討論下javascript的數(shù)據(jù)類型檢測,繼續(xù)期望大家踴躍發(fā)表意見,尤其歡迎高手拍磚。
一、javascript的數(shù)據(jù)
javascript的數(shù)據(jù)分為兩種:簡單數(shù)據(jù)和復雜數(shù)據(jù)。簡單數(shù)據(jù)包含number,string,boolean,undefined和null這五種;復雜數(shù)據(jù)只有一種即object。【此處友情鳴謝李戰(zhàn)老師,<<悟透JavaScript>>寫得太傳神,印象太深刻了】

二、javascript的數(shù)據(jù)類型檢測
1、萬能的typeof
我們先測試一下通過typeof來獲取簡單數(shù)據(jù)類型。什么也別說了,上代碼是王道:
復制代碼 代碼如下:

// 獲取變量obj的數(shù)據(jù)類型
function getType(obj) {
return typeof (obj);
}
/*常量獲取類型*/
alert(getType(1)); //number
alert(getType("jeff wong")); //string
alert(getType(true)); //boolean
alert(getType(undefined)); //undefined
alert(getType(null)); //object
/*變量獲取類型*/
var num = 1;
var str = "jeff wong";
var flag = true;
var hell = undefined;
var none = null;
alert(getType(num)); //number
alert(getType(str)); //string
alert(getType(flag)); //boolean
alert(getType(hell)); //undefined
alert(getType(none)); //object

正如你所看到的那樣,通過typeof運算符,前面四個簡單數(shù)據(jù)類型完全在意料之中,但是typeof null卻返回object。應該注意到,null是null類型的唯一值,但null并不是object,具有null值的變量也并非object,所以直接通過typeof,并不能正確得到null類型。 要正確獲取簡單數(shù)據(jù)類型,只要在getType的地方加點改進就可以了:
復制代碼 代碼如下:

function getType(obj) {
return (obj === null) ? "null" : typeof (obj);
}

接著來試一下復雜數(shù)據(jù)類型object:
復制代碼 代碼如下:

function Cat() {
}
Cat.prototype.CatchMouse = function () {
//do some thing
}
// 獲取變量obj的數(shù)據(jù)類型
function getType(obj) {
return (obj === null) ? "null" : typeof (obj);
}
var obj = new Object();
alert(getType(obj)); //object
var func = new Function();
alert(getType(func)); //function
var str = new String("jeff wong");
alert(getType(str)); //object
var num = new Number(10);
alert(getType(num)); //object
var time = new Date();
alert(getType(time)); //object
var arr = new Array();
alert(getType(arr)); //object
var reg = new RegExp();
alert(getType(reg)); //object
var garfield = new Cat();
alert(getType(garfield)); //object

我們看到,除了Function(請注意大小寫)返回了function,不管是javascript的常見內置對象Object,String或者Date等等,還是自定義function,通過typeof返回的無一例外,通通都是object。但是對于自定義function,我們更愿意得到它的“廬山真面目”(示例中即Cat,而非object),而顯然,typeof不具備這種轉換處理能力。
2、constructor,想大聲說愛你
既然萬能的typeof也有無解的時候,那么我們怎么判斷一個變量是否是自定義的function實例呢?我們知道,javascript的所有對象都有一個constructor屬性,這個屬性可以幫我們判斷object數(shù)據(jù)類型,尤其是對自定義function同樣適用:
復制代碼 代碼如下:

var obj = "jeff wong";
alert(obj.constructor == String); //true
obj = new Cat();
alert(obj.constructor == Cat); //true

但是,下面的代碼您也可以測試一下:
復制代碼 代碼如下:

//alert(1.constructor); //數(shù)字常量 出錯 數(shù)字常量無constructor
var num = 1;
alert(num.constructor == Number); //true
alert("jeff wong".constructor == String); //true
var str = "jeff wong";
alert(str.constructor == String); //true
var obj= null;
alert(obj.constructor); //null沒有constructor屬性
none = undefined;
alert(obj.constructor); //undefined沒有constructor屬性

實驗證明,數(shù)字型常量,null和undefined都沒有constructor屬性。
到這里,您會和樓豬一樣慶幸認為終于大功告成了嗎?下面的代碼或許還能有點啟發(fā)和挖掘作用:
復制代碼 代碼如下:

function Animal() {
}
function Cat() {
}
Cat.prototype = new Animal();
Cat.prototype.CatchMouse = function () {
//do some thing
}
var obj = new Cat();
alert(obj.constructor == Cat); //false ??
alert(obj.constructor == Animal); //true 理解

原來對于原型鏈繼承的情況,constuctor也不那么好使了。那怎么辦?
3、直觀的instanceof
嘿嘿,有請instanceof隆重登場。看它的命名,好像是獲取某一個對象的實例,也不知這樣理解對不對?不管怎樣,我們還是動手改進上面的代碼測試一下先:
復制代碼 代碼如下:

function Animal() {
}
function Cat() {
}
Cat.prototype = new Animal();
Cat.prototype.CatchMouse = function () {
//do some thing
}
var garfield = new Cat();
alert(garfield instanceof Cat); //true 毫無疑問
alert(garfield instanceof Animal); //true 可以理解

好了,關于javascript的數(shù)據(jù)類型檢測,樓豬就大致總結介紹到這里了。希望有心的高人補充。

相關文章

  • 配置eslint規(guī)范項目代碼風格

    配置eslint規(guī)范項目代碼風格

    這篇文章主要介紹了配置eslint規(guī)范項目代碼風格,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • JS與框架頁的操作代碼

    JS與框架頁的操作代碼

    JS與框架頁的操作函數(shù)代碼,多用于控制框架頁,一般后臺利用的比較多。
    2010-01-01
  • 通用javascript代碼判斷版本號是否在版本范圍之間

    通用javascript代碼判斷版本號是否在版本范圍之間

    通用判斷版本號是否在兩者之間,也可以搭配判斷是否大于某版本號,小于取反即可,本文給大家介紹通用javascript代碼判斷版本號是否在版本范圍之間,需要的朋友參考下
    2015-11-11
  • 詳解JSONObject和JSONArray區(qū)別及基本用法

    詳解JSONObject和JSONArray區(qū)別及基本用法

    這篇文章主要介紹了詳解JSONObject和JSONArray區(qū)別及基本用法,需要的朋友可以參考下
    2017-10-10
  • JavaScript 特有方法計算二進制中1的個數(shù) split方法

    JavaScript 特有方法計算二進制中1的個數(shù) split方法

    這是一道網(wǎng)上看到的前端的筆試題,主要思想是利用JavaScript的toString方法將十進制數(shù)轉換為二進制的字符串。然后for循環(huán)遍歷計算字符串中”1″出現(xiàn)的次數(shù)。
    2010-05-05
  • JavaScript iframe數(shù)據(jù)共享接口實現(xiàn)方法

    JavaScript iframe數(shù)據(jù)共享接口實現(xiàn)方法

    在iframe與父窗口或者與子窗口傳遞數(shù)據(jù)是一個麻煩的事情,如果我們能夠寫一個一勞永逸的接口那就再方便不過了,下面就來簡答介紹一下如何實現(xiàn)此功能,對js iframe相關知識感興趣的朋友一起學習吧
    2016-01-01
  • 詳解SPA中前端路由基本原理與實現(xiàn)方式

    詳解SPA中前端路由基本原理與實現(xiàn)方式

    這篇文章主要介紹了詳解SPA中前端路由基本原理與實現(xiàn)方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • JS中promise特點與信任問題解決

    JS中promise特點與信任問題解決

    大家都知道Promise解決了回調地獄的問題,“回調地獄”所說的嵌套其實是指異步的嵌套,它帶來了兩個問題:可讀性的問題和信任問題,下面這篇文章主要給大家介紹了關于JS中promise特點與信任問題解決的相關資料,需要的朋友可以參考下
    2022-06-06
  • 一文秒懂JavaScript構造函數(shù)、實例、原型對象以及原型鏈

    一文秒懂JavaScript構造函數(shù)、實例、原型對象以及原型鏈

    這篇文章主要介紹了一文秒懂JavaScript構造函數(shù)、實例、原型對象以及原型鏈的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 微信小程序使用自定義組件導航實現(xiàn)當前頁面高亮

    微信小程序使用自定義組件導航實現(xiàn)當前頁面高亮

    這篇文章主要介紹了微信小程序使用自定義組件導航實現(xiàn)當前頁面高亮,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-01-01

最新評論

冕宁县| 应城市| 阜平县| 阿瓦提县| 汉中市| 通道| 阜宁县| 阿鲁科尔沁旗| 郓城县| 分宜县| 夹江县| 买车| 连江县| 金沙县| 进贤县| 道孚县| 邓州市| 明光市| 区。| 茶陵县| 胶州市| 延津县| 土默特左旗| 临湘市| 田东县| 林西县| 宾阳县| 长阳| 潍坊市| 龙口市| 合川市| 丹东市| 固始县| 惠东县| 阿克陶县| 霍邱县| 渝中区| 巨鹿县| 滕州市| 岳阳市| 含山县|