亚洲欧美日韩综合系列在线_91精品人妻一区二区_欧美大肥婆一级特大AA片_九色91视频免费观看_亚洲综合国产精品_av中文字幕在线不卡_久久精品色综合网_看黄色视频的软件_无卡无码高清中文字幕码2024_亚洲欧美日韩天堂网

JavaScript數(shù)據(jù)類型檢測總結(jié)

來源:前端全棧君丶 發(fā)布時間:2018-12-04 13:58:04 閱讀量:1184

在js中,有四種用于檢測數(shù)據(jù)類型的方式,分別是:


typeof  用來檢測數(shù)據(jù)類型的運算符

instanceof    檢測一個實例是否屬于某個類

constructor   構(gòu)造函數(shù)

Object.prototype.toString.call()  原型鏈上的Object對象的toString方法

下面我們就來分別介紹一下上面四種方法的適用場景和局限性。


typeof 用來檢測數(shù)據(jù)類型的運算符


使用typeof檢測數(shù)據(jù)類型,返回值是字符串格式。能夠返回的數(shù)據(jù)類型


是:“number”,“string”,“bolean”,“undefined”,“function”,“object”。


<script>

  let arr = [1,2,3];

  let reg = /\w/;

  console.log(arr instanceof Array);  //true

  console.log(arr instanceof Object);  //true

  console.log(reg instanceof RegExp);  //true

  console.log(reg instanceof Object);  //true

</script>

1

2

3

4

5

6

7

8

前端全棧學(xué)習(xí)交流圈:866109386,面向1-3經(jīng)驗?zāi)昵岸碎_發(fā)人員,幫助突破技術(shù)瓶頸,提升思維能力

群內(nèi)有大量PDF可供自取,更有干貨實戰(zhàn)項目視頻進群免費領(lǐng)取。


局限性:


不能用于檢測和處理字面量方式創(chuàng)建出來的基本數(shù)據(jù)類型值,即原始數(shù)據(jù)類型

instanceof的特性:只要在當(dāng)前實例的原型鏈上的對象,我們用其檢測出來都為true

在類的原型繼承中,我們最后檢測出來的結(jié)果未必正確

constructor 構(gòu)造函數(shù)


是函數(shù)原型上的屬性,該屬性指向的是構(gòu)造函數(shù)本身。


作用和instsnceof非常相似,與instanceof不同的是,不僅可以處理引用數(shù)據(jù)類型,還可以處理原始數(shù)據(jù)類型。


<script>

  let num = 12;

  let obj = {};

  console.log(num.constructor == Number);//true

  console.log(obj.constructor == Object);//true

</script>

1

2

3

4

5

6

但是要注意一點的是,當(dāng)直接用(對象字面量或原始數(shù)據(jù)).constructor時,最好加上()。為了便于理解,我們來看一個例子。


<script>

  1.constructor === Number;    //報錯,Invalid or unexceped token

  (1).constructor === Number;    //true

  {}.constructor === Number;    //報錯,Invalid or unexceped token

  ({}).constructor === Number;  //true

</script>

1

2

3

4

5

6

前端全棧學(xué)習(xí)交流圈:866109386,面向1-3經(jīng)驗?zāi)昵岸碎_發(fā)人員,幫助突破技術(shù)瓶頸,提升思維能力

群內(nèi)有大量PDF可供自取,更有干貨實戰(zhàn)項目視頻進群免費領(lǐng)取。


這主要是由于js內(nèi)部解析方式造成的,js會把1.constructor解析成小數(shù),這顯然是不合理的,小數(shù)點后應(yīng)該是數(shù)字,因此就會引發(fā)報錯。js會把{}解析成語句塊來執(zhí)行,這時后面出現(xiàn)一個小數(shù)點顯然也是不合理的,因此也會報錯。為了解決這個問題,我們可以為表達式加上()使js能夠正確解析。


局限性:我們可以把類的原型進行重寫,在重寫的過程中很可能把之前constructor給覆蓋了,這樣檢測出來的結(jié)果就是不準(zhǔn)確的


<script>

   function Fn() {};

  Fn.prototype = new Array;

  var f = new Fn;

  //f是一個函數(shù),按道理說他的構(gòu)造函數(shù)應(yīng)該是Function,但是修改其原型鏈后,它的constructor變成了Array.

  console.log(f.constructor == Array);  //true

</script>

1

2

3

4

5

6

7

Object.prototype.toString.call() 原型鏈上的Object對象的toString方法


Object.prototype.toString的作用是返回當(dāng)前方法的執(zhí)行主體(方法中的this)所屬類的詳細信息,是最全面也是最常用的檢測數(shù)據(jù)類型的方式。


返回值的類型為string類型。


<script> 

  console.log(Object.prototype.toString.call(1));          //[object Number]

  console.log(Object.prototype.toString.call(/^sf/));        //[object RegExp]

  console.log(Object.prototype.toString.call("hello"));      //[object String]

  console.log(Object.prototype.toString.call(true));        //[object Boolean]

  console.log(Object.prototype.toString.call(null));        //[object Null]

  console.log(Object.prototype.toString.call(undefined));      //[object Undefined]

  console.log(Object.prototype.toString.call(function() {}));    //[object Function]

  console.log(typeof(Object.prototype.toString.call(function() {})));    //string

</script>

--------------------- 



標(biāo)簽: PHP 環(huán)境搭建
分享:
評論:
你還沒有登錄,請先