亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

Honwhy / 3241人閱讀

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

typeof
用來(lái)檢測(cè)數(shù)據(jù)類型的運(yùn)算符
語(yǔ)法: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ù)類型值,但是它屬于空對(duì)象指針,檢測(cè)的結(jié)果是對(duì)象
typeof {} //=>"object" 
typeof function(){} //=>"function"
typeof [] //=>"object"
typeof /^$/ //=>"object"
//使用typeof有自己的局限性,不能具體細(xì)分當(dāng)前的值是數(shù)組還是正則(也就是不能細(xì)分對(duì)象類型的值)
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 : 檢測(cè)某一個(gè)實(shí)例是否屬于某各類的實(shí)例
constructor : 構(gòu)造函數(shù)

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

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

var num2=new Number(12);
num2.toFixed(2) =>"12.00" 
typeof num //=>"number"
typeof num2//=>"object"
//不管是哪一種方式創(chuàng)建基本類型值,都是自己所屬類的實(shí)例(只不過(guò)類型不一樣而已)
num instanceof Number //=>false
num2 instanceof Number //=>true
2.instanceof 檢測(cè)的原理是基于原型鏈檢測(cè)的:只要當(dāng)前類在實(shí)例的原型鏈上,最后返回的結(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ù)組,但是它不具備數(shù)組的基礎(chǔ)結(jié)構(gòu),這也是instanceof的弊端
constructor
獲取當(dāng)前檢測(cè)數(shù)據(jù)值的constructor,判斷它是否是某一個(gè)數(shù)據(jù)類型內(nèi)置類來(lái)檢測(cè)
var ary=[];
ary.constructor===Array //=>true
ary.constructor===RegExp //=>false
ary.constructor===Object //=>false

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

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

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

/*
*obj.toString()
*  首先執(zhí)行Object.prototype.toString 方法
*  這個(gè)方法的this就是我們操作的數(shù)據(jù)值obj
*  =>總結(jié):Object.prototype.toString執(zhí)行的時(shí)候會(huì)返回當(dāng)前方法中的this的所屬類信息
*
*  也就是,我們想知道誰(shuí)是所屬類信息,我們就把這個(gè)toString方法執(zhí)行,并且讓this變?yōu)槲覀儥z測(cè)的這個(gè)數(shù)據(jù)值,那么方法返回的結(jié)果就是當(dāng)前檢測(cè)這個(gè)值的所屬類信息
*  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檢測(cè)數(shù)據(jù)類型,不管你是什么類型值,都可以正常檢測(cè)出需要的結(jié)果(這個(gè)方法檢測(cè)是萬(wàn)能的)
alert({name:"tom"})  //[object Object] alert()=>轉(zhuǎn)換為字符串彈出 
//如果彈對(duì)象字符串 alert(JSON.stringify({name:"tom"}))
檢測(cè)數(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/102503.html

相關(guān)文章

  • JavaScript專題系列文章

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

    Maxiye 評(píng)論0 收藏0
  • 深入理解js

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

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

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

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

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

    lk20150415 評(píng)論0 收藏0
  • 深入理解JavaScript

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

    myeveryheart 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<