數(shù)據(jù)類型的判定

數(shù)據(jù)類型的判定

js六大數(shù)據(jù)類型:number源葫、string、object厘熟、Boolean、null维哈、undefined

string: 由單引號或雙引號來說明绳姨,如"string"

number:什么整數(shù)啊浮點數(shù)啊都叫數(shù)字,你懂的~

Boolean: 就是true和false啦

undefined:未定義笨农,就是你創(chuàng)建一個變量后卻沒給它賦值~

null: 故名思久,null就是沒有帖渠,什么也不表示

object: 這個我也很難解釋的說谒亦。就是除了上面五種之外的類型

數(shù)據(jù)類型判斷之 typeof

typeof可以解決大部分的數(shù)據(jù)類型判斷,是一個一元運算空郊,放在一個運算值之前份招,其返回值為一個字符串,該字符串說明運算數(shù)的類型狞甚,所以判斷某個是否為String類型锁摔,可以直接 if(typeof(你的值) == "string"){}

var a=1; console.log(a); //number
var a=false; console.log(a); //boolean
var a; console.log(typeof a); //undfined

var a = null; console.log(typeof a); //object
var a = document; console.log(typeof a); //object
var a = []; console.log(a); //object

var a = function(){}; console.log(typeof a) //function   除了可以判斷數(shù)據(jù)類型還可以判斷function類型

這樣一來就很明顯了,除了前四個類型外哼审,null谐腰、對象、數(shù)組返回的都是object類型涩盾;

對于函數(shù)類型返回的則是function十气,再比如typeof(Date),typeof(eval)等春霍。

js判斷數(shù)組類型的方法

方法一之 instanceof

instance砸西,故名思義,實例址儒,例子芹枷,所以instanceof 用于判斷一個變量是否某個對象的實例,是一個三目運算式---和typeof最實質(zhì)上的區(qū)別

a instanceof b?alert("true"):alert("false") //注意b值是你想要判斷的那種數(shù)據(jù)類型莲趣,不是一個字符串鸳慈,比如Array

舉個栗子:

console.log(a instanceof Array) //返回true

方法二之 constructor

在W3C定義中的定義:constructor 屬性返回對創(chuàng)建此對象的數(shù)組函數(shù)的引用

就是返回對象相對應(yīng)的構(gòu)造函數(shù)。從定義上來說跟instanceof不太一致喧伞,但效果都是一樣的

如: (a instanceof Array) //a是否Array的實例蝶涩?true or false

(a.constructor == Array) // a實例所對應(yīng)的構(gòu)造函數(shù)是否為Array? true or false

舉個栗子:

    this.name=name;
    this.job=job;
    this.born=born;
}

var bill=new employee("Bill Gates","Engineer",1985);
console.log(bill.constructor); //輸出function employee(name, jobtitle, born){this.name = name; this.jobtitle = job; this.born = born;}

那么判斷各種類型的方法就是:

console.log({}.constructor == Object);
console.log("string".constructor == String);
console.log((123).constructor == Number);
console.log(true.constructor == Boolean);

較為嚴(yán)謹(jǐn)并且通用的方法:

    return object && typeof object==='object' &&
            Array == object.constructor;
}

@砼蟆!注意:

使用instaceof和construcor,被判斷的array必須是在當(dāng)前頁面聲明的绿聘!比如嗽上,一個頁面(父頁面)有一個框架,框架中引用了一個頁面(子頁面)熄攘,在子頁面中聲明了一個array兽愤,并將其賦值給父頁面的一個變量,這時判斷該變量挪圾,Array == object.constructor;會返回false浅萧;
原因:
1、array屬于引用型數(shù)據(jù)哲思,在傳遞過程中洼畅,僅僅是引用地址的傳遞。
2棚赔、每個頁面的Array原生對象所引用的地址是不一樣的帝簇,在子頁面聲明的array,所對應(yīng)的構(gòu)造函數(shù)靠益,是子頁面的Array對象丧肴;父頁面來進(jìn)行判斷,使用的Array并不等于子頁面的Array胧后;切記芋浮,不然很難跟蹤問題!

方法三之 特性判斷法

以上方法均有一定的缺陷壳快,但要相信人民大眾的智慧是無所不能及的纸巷,我們可根據(jù)數(shù)組的一些特性來判斷其類型

    return  object && typeof object==='object' &&    
            typeof object.length==='number' &&  
            typeof object.splice==='function' &&    
             //判斷l(xiāng)ength屬性是否是可枚舉的 對于數(shù)組 將得到false  
            !(object.propertyIsEnumerable('length'));
}```

有l(wèi)ength和splice并不一定是數(shù)組,因為可以為對象添加屬性眶痰,而不能枚舉length屬性何暇,才是最重要的判斷因子。

ps: 在這里普及下 propertyIsEnumerable 方法:

object. propertyIsEnumerable(proName)
判斷指定的屬性是否可列舉

備注:如果 proName 存在于 object 中且可以使用一個 For…In 循環(huán)窮舉出來凛驮,那么 propertyIsEnumerable 屬性返回 true裆站。如果 object 不具有所指定的屬性或者所指定的屬性不是可列舉的,那么 propertyIsEnumerable 屬性返回 false黔夭。

propertyIsEnumerable 屬性不考慮原型鏈中的對象宏胯。

示例:

```var a = new Array("apple", "banana", "cactus");
document.write(a.propertyIsEnumerable(1));```

### 方法四之 最簡單的方法

```function isArray(o) {
    return Object.prototype.toString.call(o) === ‘[object Array]‘;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市本姥,隨后出現(xiàn)的幾起案子肩袍,更是在濱河造成了極大的恐慌,老刑警劉巖婚惫,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件氛赐,死亡現(xiàn)場離奇詭異魂爪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)艰管,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門滓侍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牲芋,你說我怎么就攤上這事撩笆。” “怎么了缸浦?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵夕冲,是天一觀的道長。 經(jīng)常有香客問我裂逐,道長歹鱼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任卜高,我火速辦了婚禮弥姻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘篙悯。我一直安慰自己蚁阳,他們只是感情好铃绒,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布鸽照。 她就那樣靜靜地躺著,像睡著了一般颠悬。 火紅的嫁衣襯著肌膚如雪矮燎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天赔癌,我揣著相機(jī)與錄音诞外,去河邊找鬼。 笑死灾票,一個胖子當(dāng)著我的面吹牛峡谊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播刊苍,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼既们,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了正什?” 一聲冷哼從身側(cè)響起啥纸,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婴氮,沒想到半個月后斯棒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盾致,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年荣暮,在試婚紗的時候發(fā)現(xiàn)自己被綠了庭惜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡渠驼,死狀恐怖蜈块,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迷扇,我是刑警寧澤百揭,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站蜓席,受9級特大地震影響器一,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜厨内,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一祈秕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雏胃,春花似錦请毛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至统翩,卻和暖如春仙蚜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背厂汗。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工委粉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娶桦。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓贾节,卻偏偏與公主長得像,于是被迫代替她去往敵國和親衷畦。 傳聞我的和親對象是個殘疾皇子栗涂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容