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

淺談javascript的數據類型檢測

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

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

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

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

接著來試一下復雜數據類型object:
復制代碼 代碼如下:

function Cat() {
}
Cat.prototype.CatchMouse = function () {
//do some thing
}
// 獲取變量obj的數據類型
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數據類型,尤其是對自定義function同樣適用:
復制代碼 代碼如下:

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

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

//alert(1.constructor); //數字常量 出錯 數字常量無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屬性

實驗證明,數字型常量,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的數據類型檢測,樓豬就大致總結介紹到這里了。希望有心的高人補充。

相關文章

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

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

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

    JS與框架頁的操作代碼

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

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

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

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

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

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

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

    JavaScript iframe數據共享接口實現方法

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

    詳解SPA中前端路由基本原理與實現方式

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

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

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

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

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

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

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

最新評論

高安市| 越西县| 桐城市| 鹿泉市| 德保县| 潼南县| 民丰县| 景德镇市| 武胜县| 红原县| 盐池县| 罗江县| 冕宁县| 嵊州市| 邵阳县| 苍山县| 远安县| 赣州市| 焦作市| 峨山| 枣强县| 道孚县| 四平市| 九龙县| 宿迁市| 无极县| 双峰县| 江源县| 电白县| 讷河市| 凤凰县| 布尔津县| 宽甸| 雅安市| 黎城县| 洱源县| 井冈山市| 景泰县| 岚皋县| 武邑县| 洪泽县|