成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript基礎(chǔ)篇:JS中的數(shù)據(jù)類型檢測專題

Honwhy / 3192人閱讀

摘要:用來檢測數(shù)據(jù)類型的運算符語法雖然是基本數(shù)據(jù)類型值,但是它屬于空對象指針,檢測的結(jié)果是對象使用有自己的局限性,不能具體細分當前的值是數(shù)組還是正則也就是不能細分對象類型的值先算檢測某一個實例是否屬于某各類的實例構(gòu)造函數(shù)使用檢測某個值是否屬于某

typeof
用來檢測數(shù)據(jù)類型的運算符
語法:typeof[value]
typeof 12 //=>"number"
typeof NaN //=>"number"
typeof ""=>"string"
var flag=true;
typeof flag //"boolen"
tpeof undefined //=>"undefined"
function fn(n,m){
    if(typeof n==="undefined"){

    }
}
typeof null //=>"object" //雖然是基本數(shù)據(jù)類型值,但是它屬于空對象指針,檢測的結(jié)果是對象
typeof {} //=>"object" 
typeof function(){} //=>"function"
typeof [] //=>"object"
typeof /^$/ //=>"object"
//使用typeof有自己的局限性,不能具體細分當前的值是數(shù)組還是正則(也就是不能細分對象類型的值)
typeof (1>1?0:2) //=>"number"
typeof 1>1?0:2 //=>先算typeof 1-> "number"=> "number">1?0:2
typeof typeof [] //=>"string"
//=>typeof [] "object" 
//type of "object" =>"string"
instanceof & constructor
instanceof : 檢測某一個實例是否屬于某各類的實例
constructor : 構(gòu)造函數(shù)

使用instanceof 檢測某個值是否屬于某一個數(shù)據(jù)類型的內(nèi)置類,從而檢測出它是否是這個類型的值;使用instanceof可以實現(xiàn)typeof實現(xiàn)不了的,對對象類型值詳細的區(qū)分檢測;

[] instanceof Array //=>true
[] instanceof RegExp //=>false
使用instanceof檢測也有自己的弊端:
1.基本類型值無法基于它的檢測
var num =12;
num.toFixed(2) =>"12.00" //12是Number類的一個實例,可以調(diào)取Number.prototype上的方法,但是它是基本類型值

var num2=new Number(12);
num2.toFixed(2) =>"12.00" 
typeof num //=>"number"
typeof num2//=>"object"
//不管是哪一種方式創(chuàng)建基本類型值,都是自己所屬類的實例(只不過類型不一樣而已)
num instanceof Number //=>false
num2 instanceof Number //=>true
2.instanceof 檢測的原理是基于原型鏈檢測的:只要當前類在實例的原型鏈上,最后返回的結(jié)果都是true.
var ary=[];
ary instanceof Array //=>true
ary instanceof Object //=>true

function Fn(){}
Fn.prototype=new Array();//=>原型繼承(Fn 是Array的子類)
var f=new Fn();
f instanceof Array //=>true 但是f其實不是數(shù)組,雖然在它的原型上可以找到數(shù)組,但是它不具備數(shù)組的基礎(chǔ)結(jié)構(gòu),這也是instanceof的弊端
constructor
獲取當前檢測數(shù)據(jù)值的constructor,判斷它是否是某一個數(shù)據(jù)類型內(nèi)置類來檢測
var ary=[];
ary.constructor===Array //=>true
ary.constructor===RegExp //=>false
ary.constructor===Object //=>false

ary.constructor="AA"
ary.constructor===Array; //false
//=>constructor檢測數(shù)據(jù)類型非常不可靠,因為這個屬性是經(jīng)常容易被修改的。
Object.prototype.toString.call
獲取Object.prototype上的toString方法,讓方法中的this變?yōu)樾枰獧z測的數(shù)據(jù)類型值,并且讓方法執(zhí)行

在Number、String、Boolean、Array、Function、RexExp...這些類的原型上都有一個toString方法:這個方法就是將自身的值轉(zhuǎn)換為字符串的

(12).toString() //=>"12"
(true).toString() //=>"true"
[12,23].toString() //=>"12,23"
...
在Object這個類的原型上也有一個方法toString,但是這個方法并不是把值轉(zhuǎn)換為字符串,而是返回當前值的所屬類詳細信息[object 所屬的類]
var obj={name:"tom"}
obj.toString() //=>"[object Object]" 調(diào)取的是Object.prototype.toString 

/*
*obj.toString()
*  首先執(zhí)行Object.prototype.toString 方法
*  這個方法的this就是我們操作的數(shù)據(jù)值obj
*  =>總結(jié):Object.prototype.toString執(zhí)行的時候會返回當前方法中的this的所屬類信息
*
*  也就是,我們想知道誰是所屬類信息,我們就把這個toString方法執(zhí)行,并且讓this變?yōu)槲覀儥z測的這個數(shù)據(jù)值,那么方法返回的結(jié)果就是當前檢測這個值的所屬類信息
*  Object.prototype.toString.call([value])
*  ({}).toString.call([value])
*  */
Object.prototype.toString.call(12) //=>"[object Number]"
Object.prototype.toString.call(true) //=>"[object Boolean]"
Object.prototype.toString.call("") //=>"[object String]"
Object.prototype.toString.call({}) //=>"[object Object]"
Object.prototype.toString.call(null) //=>"[object Null]"
Object.prototype.toString.call([]) //=>"[object Array]"
Object.prototype.toString.call(/^$/) //=>"[object RegExp]"
Object.prototype.toString.call(function(){}) //=>"[object Function]"
使用toString檢測數(shù)據(jù)類型,不管你是什么類型值,都可以正常檢測出需要的結(jié)果(這個方法檢測是萬能的)
alert({name:"tom"})  //[object Object] alert()=>轉(zhuǎn)換為字符串彈出 
//如果彈對象字符串 alert(JSON.stringify({name:"tom"}))
檢測數(shù)據(jù)類型方法封裝
~function(){
    let obj={
        isNumber:"Number",
        isString:"String",
        isBoolean:"Boolean",
        isNull:"Null",
        isUndefined:"Undefined",
        isPlanObject:"Object",
        isArray:"Array",
        isRegExp:"RegExp",
        isFunction:"Function"
    }
    let check={};
    for (let key in obj) {
        if (obj.hasOwnProperty(key)) {
            check[key]=(function(classValue){
                return function(val){
                    return new RegExp("[object "+classValue+"]").test(Object.prototype.toString.call(val))
                }
            })(obj[key])
        }
    }
    window.check=check;
}()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/102503.html

相關(guān)文章

  • JavaScript專題系列文章

    摘要:專題系列共計篇,主要研究日常開發(fā)中一些功能點的實現(xiàn),比如防抖節(jié)流去重類型判斷拷貝最值扁平柯里遞歸亂序排序等,特點是研究專題之函數(shù)組合專題系列第十六篇,講解函數(shù)組合,并且使用柯里化和函數(shù)組合實現(xiàn)模式需求我們需要寫一個函數(shù),輸入,返回。 JavaScript 專題之從零實現(xiàn) jQuery 的 extend JavaScritp 專題系列第七篇,講解如何從零實現(xiàn)一個 jQuery 的 ext...

    Maxiye 評論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計模式力薦深度好文深入理解大設(shè)計模式收集各種疑難雜癥的問題集錦關(guān)于,工作和學(xué)習(xí)過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實現(xiàn)方式 延遲加載也稱為惰性加載,即在長網(wǎng)頁中延遲加載圖像。用戶滾動到它們之前,視口外的圖像不會加載。本文詳細介紹了三種延遲加載的實現(xiàn)方式。 詳解 Javascript十大常用設(shè)計模式 力薦~ ...

    caikeal 評論0 收藏0
  • JS專題數(shù)據(jù)類型類型檢測

    摘要:運算符可以用來檢測某個構(gòu)造函數(shù)的屬性是否存在于另外一個要檢測對象的原型鏈上。使用方法可以獲取到變量的準確的數(shù)據(jù)類型就能解決基本包裝類型的檢測錯誤和的檢測不安全。 本文共 1750 字,讀完只需 7 分鐘 數(shù)據(jù)類型有哪些? ECMAScript 的數(shù)據(jù)類型分為簡單數(shù)據(jù)類型(也被稱為基本數(shù)據(jù)類型,原始數(shù)據(jù)類型): Undefined Null String Number Boolean ...

    since1986 評論0 收藏0
  • JavaScript專題類型判斷(上)

    摘要:專題系列第四篇,講解類型判斷的各種方法,并且跟著寫一個函數(shù)。返回值為表示操作數(shù)類型的一個字符串??紤]到實際情況下并不會檢測和,所以去掉這兩個類型的檢測。 JavaScript專題系列第四篇,講解類型判斷的各種方法,并且跟著 jQuery 寫一個 type 函數(shù)。 前言 類型判斷在 web 開發(fā)中有非常廣泛的應(yīng)用,簡單的有判斷數(shù)字還是字符串,進階一點的有判斷數(shù)組還是對象,再進階一點的有判...

    lk20150415 評論0 收藏0
  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點深入系列第十五篇,講解各種繼承方式和優(yōu)缺點。對于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點 JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評論0 收藏0

發(fā)表評論

0條評論

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