• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    談談我對JavaScript中typeof和instanceof的深入理解_javascript技巧

    來源:懂視網 責編:小采 時間:2020-11-27 21:47:52
    文檔

    談談我對JavaScript中typeof和instanceof的深入理解_javascript技巧

    談談我對JavaScript中typeof和instanceof的深入理解_javascript技巧:這次主要說說javascript的類型判斷函數(shù)typeof和判斷構造函數(shù)原型instanceof的用法和注意的地方。 typeof 先來說說typeof吧。首先需要注意的是,typeof方法返回一個字符串,來表示數(shù)據(jù)的類型。 typeof 是一個一元運算,放在一個運算數(shù)之前,運算數(shù)可以是任意
    推薦度:
    導讀談談我對JavaScript中typeof和instanceof的深入理解_javascript技巧:這次主要說說javascript的類型判斷函數(shù)typeof和判斷構造函數(shù)原型instanceof的用法和注意的地方。 typeof 先來說說typeof吧。首先需要注意的是,typeof方法返回一個字符串,來表示數(shù)據(jù)的類型。 typeof 是一個一元運算,放在一個運算數(shù)之前,運算數(shù)可以是任意
    這次主要說說javascript的類型判斷函數(shù)typeof和判斷構造函數(shù)原型instanceof的用法和注意的地方。

    typeof

    先來說說typeof吧。首先需要注意的是,typeof方法返回一個字符串,來表示數(shù)據(jù)的類型。

    typeof 是一個一元運算,放在一個運算數(shù)之前,運算數(shù)可以是任意類型。

    它返回值是一個字符串,該字符串說明運算數(shù)的類型。typeof 一般只能返回如下幾個結果:
    number,boolean,string,function,object,undefined。我們可以使用 typeof 來獲取一個變量是否存在,如 if(typeof a!="undefined"){alert("ok")},而不要去使用 if(a) 因為如果 a 不存在(未聲明)則會出錯,對于 Array,Null 等特殊對象使用 typeof 一律返回 object,這正是 typeof 的局限性。

    語法講解

    我們先看看各個數(shù)據(jù)類型對應typeof的值:

    數(shù)據(jù)類型 Type
    Undefined “undefined”
    Null “object”
    布爾值 “boolean”
    數(shù)值 “number”
    字符串 “string”
    Symbol (ECMAScript 6 新增) “symbol”
    宿主對象(JS環(huán)境提供的,比如瀏覽器) Implementation-dependent
    函數(shù)對象 “function”
    任何其他對象 “object”

    再看看具體的實例:

    我們會發(fā)現(xiàn)一個問題,就是typeof來判斷數(shù)據(jù)類型其實并不準確。比如數(shù)組、正則、日期、對象的typeof返回值都是object,這就會造成一些誤差。

    所以在typeof判斷類型的基礎上,我們還需要利用Object.prototype.toString方法來進一步判斷數(shù)據(jù)類型。

    我們來看看在相同數(shù)據(jù)類型的情況下,toString方法和typeof方法返回值的區(qū)別:

    數(shù)據(jù) toString typeof
    “foo” String string
    new String(“foo”) String object
    new Number(1.2) Number object
    true Boolean boolean
    new Boolean(true) Boolean object
    new Date() Date object
    new Error() Error object
    new Array(1, 2, 3) Array object
    /abc/g RegExp object
    new RegExp(“meow”) RegExp object

    可以看到利用toString方法可以正確區(qū)分出Array、Error、RegExp、Date等類型。

    所以我們一般通過該方法來進行數(shù)據(jù)類型的驗證

    真題檢測

    但是既然今天說到了typeof,那這里就列出幾道題目,來看看自己是否真正掌握了typeof的用法。

    第一題:

    第二題:

    第三題:

    第四題:

    第五題:

    第六題:

    第七題:

    下面公布答案了,這七題的答案分別是:

    "undefined","number","undefined","undefined","number","1undefined","undefined"

    做對了幾道呢?是不是很大的困惑呢?這幾題雖然都有typeof,但是考察了很多javascript的基礎噢。下面我們來一一詳解。

    第一題:

    表達式是從右往左的,x由于變量提升,類型不是null,而是undefined,所以x=y=”undefined”。

    變量提升我在這篇文章中提到過,可以看看。

    第二題:

    傳入的參數(shù)為f也就是function(){ return 1; }這個函數(shù)。通過f()執(zhí)行后,得到結果1,所以typeof 1返回”number”。這道題很簡單,主要是區(qū)分f和f()。

    第三題:

    這一題考察的是this的指向。this永遠指向函數(shù)執(zhí)行時的上下文,而不是定義時的(ES6的箭頭函數(shù)不算)。當arguments執(zhí)行時,this已經指向了window對象。所以是”undefined”。對this執(zhí)行不熟悉的同學可以看看這篇文章:深入理解this,對剛剛提到的箭頭函數(shù)感興趣的同學可以看看初步探究ES6之箭頭函數(shù)。

    第四題:

    如果上面那一題做對了,那么這一題也應該不會錯,同樣是this的指向問題。

    第五題:

    這一題比較容易錯,因為我在遇到這道題之前也從來沒有遇到過javascript的分組選擇符。什么叫做分組選擇符呢?舉一個例子就會明白了:

    所以上面的題目會返回2,typeof 2當然是”number”啦。

    第六題:

    這是一個javascript語言規(guī)范上的問題,在條件判斷中加入函數(shù)聲明。這個聲明語句本身沒有錯,也會返回true,但是javascript引擎在搜索的時候卻找不到該函數(shù)。所以結果為”1undefined”。

    第七題:

    這題其實是一個考察心細程度的題目。形參的foo指向的是{ foo: { bar: 1 } }這個整體。相信這么說就明白了。

    好啦。上面的題目都是很好的資源噢。

    instanceof

    接下來該說說instanceof方法了。instanceof運算符可以用來判斷某個構造函數(shù)的prototype屬性是否存在于另外一個要檢測對象的原型鏈上。

    instanceof 用于判斷一個變量是否某個對象的實例,如 var a=new Array();alert(a instanceof Array); 會返回 true,同時 alert(a instanceof Object) 也會返回 true;這是因為 Array 是 object 的子類。再如:function test(){};var a=new test();alert(a instanceof test) 會返回

    談到 instanceof 我們要多插入一個問題,就是 function 的 arguments,我們大家也許都認為 arguments 是一個 Array,但如果使用 instaceof 去測試會發(fā)現(xiàn) arguments 不是一個 Array 對象,盡管看起來很像。

    如果對原型不太了解,可以看看深入理解原型。

    下面我們看看instanceof的實例:

    但是這里我們需要注意一個問題:

    第一個為什么返回false呢?因為構造函數(shù)的原型被覆蓋了,我們可以看看new f和new g的區(qū)別:

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    談談我對JavaScript中typeof和instanceof的深入理解_javascript技巧

    談談我對JavaScript中typeof和instanceof的深入理解_javascript技巧:這次主要說說javascript的類型判斷函數(shù)typeof和判斷構造函數(shù)原型instanceof的用法和注意的地方。 typeof 先來說說typeof吧。首先需要注意的是,typeof方法返回一個字符串,來表示數(shù)據(jù)的類型。 typeof 是一個一元運算,放在一個運算數(shù)之前,運算數(shù)可以是任意
    推薦度:
    標簽: javascript of typeof
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 人妻少妇精品视频一区二区三区| 欧美精品国产精品| 东京热TOKYO综合久久精品| 久久精品国产欧美日韩| 精品国产一区二区三区免费 | 欧美在线精品永久免费播放| 欧美一卡2卡3卡四卡海外精品| 久久久久国产精品熟女影院| 亚洲性日韩精品国产一区二区| 久久国产综合精品五月天| Xx性欧美肥妇精品久久久久久| 国产亚洲精品a在线观看app| 久久亚洲精品人成综合网| 中文字幕久久精品| 亚洲精品和日本精品| 欧洲精品码一区二区三区免费看| 久久99国产精品成人欧美| 国产精品五月天强力打造| 夜色www国产精品资源站| 精品国产污污免费网站| 国产一区二区三区久久精品| 99久久精品日本一区二区免费| 久久精品中文无码资源站| 亚洲精品蜜桃久久久久久| 亚洲欧美精品午睡沙发| 三级高清精品国产| 亚洲av午夜精品一区二区三区 | 99riav国产精品| 欧美精品/日韩精品/国产精品| sihu国产精品永久免费| 国精品午夜福利视频不卡麻豆| 欧美午夜精品久久久久免费视| 亚洲精品国精品久久99热一| 亚洲人成精品久久久久| 亚洲精品午夜国产VA久久成人| 中文无码精品一区二区三区| 午夜精品久久久久久99热| 久久精品国产99久久无毒不卡| 精品人妻久久久久久888| 国产精品天干天干综合网| 国产国产精品人在线视|