成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

Honwhy / 3261人閱讀

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

typeof
用來檢測數(shù)據(jù)類型的運(yùn)算符
語法: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ì)象指針,檢測的結(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 : 檢測某一個(gè)實(shí)例是否屬于某各類的實(shí)例
constructor : 構(gòu)造函數(shù)

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

[] instanceof Array //=>true
[] instanceof RegExp //=>false
使用instanceof檢測也有自己的弊端:
1.基本類型值無法基于它的檢測
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í)例(只不過類型不一樣而已)
num instanceof Number //=>false
num2 instanceof Number //=>true
2.instanceof 檢測的原理是基于原型鏈檢測的:只要當(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)前檢測數(shù)據(jù)值的constructor,判斷它是否是某一個(gè)數(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ù)類型非常不可靠,因?yàn)檫@個(gè)屬性是經(jīng)常容易被修改的。
Object.prototype.toString.call
獲取Object.prototype上的toString方法,讓方法中的this變?yōu)樾枰獧z測的數(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的所屬類信息
*
*  也就是,我們想知道誰是所屬類信息,我們就把這個(gè)toString方法執(zhí)行,并且讓this變?yōu)槲覀儥z測的這個(gè)數(shù)據(jù)值,那么方法返回的結(jié)果就是當(dāng)前檢測這個(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檢測數(shù)據(jù)類型,不管你是什么類型值,都可以正常檢測出需要的結(jié)果(這個(gè)方法檢測是萬能的)
alert({name:"tom"})  //[object Object] alert()=>轉(zhuǎn)換為字符串彈出 
//如果彈對(duì)象字符串 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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/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ì)模式收集各種疑難雜癥的問題集錦關(guān)于,工作和學(xué)習(xí)過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱為惰性加載,即在長網(wǎng)頁中延遲加載圖像。用戶滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...

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

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

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

    摘要:專題系列第四篇,講解類型判斷的各種方法,并且跟著寫一個(gè)函數(shù)。返回值為表示操作數(shù)類型的一個(gè)字符串。考慮到實(shí)際情況下并不會(huì)檢測和,所以去掉這兩個(gè)類型的檢測。 JavaScript專題系列第四篇,講解類型判斷的各種方法,并且跟著 jQuery 寫一個(gè) type 函數(shù)。 前言 類型判斷在 web 開發(fā)中有非常廣泛的應(yīng)用,簡單的有判斷數(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ì)于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(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)論

閱讀需要支付1元查看
<