亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js中typeof的用法匯總

2019-11-20 21:28:52
字體:
供稿:網(wǎng)友

JavaScript中的typeof其實非常復雜,它可以用來做很多事情,但同時也有很多怪異的表現(xiàn).本文列舉出了它的多個用法,而且還指出了存在的問題以及解決辦法.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/typeof?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FOperators%2Ftypeof

    > typeof undefined
    'undefined'
    > typeof null // well-known bug
    'object'
    > typeof true
    'boolean'
    > typeof 123
    'number'
    > typeof "abc"
    'string'
    > typeof function() {}
    'function'
    > typeof {}
    'object'
    > typeof []
    'object'
    > typeof unknownVariable
    'undefined'

1.檢查一個變量是否存在,是否有值.
typeof在兩種情況下會返回"undefined":一個變量沒有被聲明的時候,和一個變量的值是undefined的時候.例如:

> typeof undeclaredVariable === "undefined" true > var declaredVariable; > typeof declaredVariable 'undefined' > typeof undefined 'undefined'
還有其他辦法檢測某個值是否是undefined:

> var value = undefined; > value === undefined true
但這種方法如果使用在一個未聲明的變量上的時候,就會拋出異常,因為只有typeof才可以正常檢測未聲明的變量的同時還不報錯:

> undeclaredVariable === undefined ReferenceError: undeclaredVariable is not defined
注意:未初始化的變量,沒有被傳入?yún)?shù)的形參,不存在的屬性,都不會出現(xiàn)上面的問題,因為它們總是可訪問的,值總是undefined:

> var declaredVariable; > declaredVariable === undefined true > (function (x) { return x === undefined }()) true > ({}).foo === undefined true
譯者注:因此,如果想檢測一個可能沒有被聲明的全局變量是否存在,也可以使用 if(window.maybeUndeclaredVariable){}


問題: typeof在完成這樣的任務時顯得很繁雜.

解決辦法: 這樣的操作不是很常見,所以有人覺的沒必要再找更好的解決辦法了.不過也許有人會提出一個專門的操作符:

> defined undeclaredVariable false > var declaredVariable; > defined declaredVariable false
或者,也許有人還需要一個檢測變量是否被聲明的操作符:

> declared undeclaredVariable false > var declaredVariable; > declared declaredVariable true
譯者注:在perl里,上面的defined操作符相當于defined(),上面的declared操作符相當于exists(),

2.判斷一個值不等于undefined也不等于null
問題:如果你想檢測一個值是否被定義過(值不是undefined也不是null),那么你就遇到了typeof最有名的一個怪異表現(xiàn)(被認為是一個bug):typeof null返回了"object":

> typeof null 'object'
譯者注:這只能說是最初的JavaScript實現(xiàn)的bug,而現(xiàn)在標準就是這樣規(guī)范的.V8曾經(jīng)修正并實現(xiàn)過typeof null === "null",但最終證明不可行.http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null


解決辦法: 不要使用typeof來做這項任務,用下面這樣的函數(shù)來代替:

function isDefined(x) { return x !== null && x !== undefined; }
另一個可能性是引入一個“默認值運算符”,在myValue未定義的情況下,下面的表達式會返回defaultValue:

myValue ?? defaultValue
上面的表達式等價于:

(myValue !== undefined && myValue !== null) ? myValue : defaultValue
又或者:

myValue ??= defaultValue
其實是下面這條語句的簡化:

myValue = myValue ?? defaultValue
當你訪問一個嵌套的屬性時,比如bar,你或許會需要這個運算符的幫助:

obj.foo.bar
如果obj或者obj.foo是未定義的,上面的表達式會拋出異常.一個運算符.??可以讓上面的表達式在遍歷一層一層的屬性時,返回第一個遇到的值為undefined或null的屬性:

obj.??foo.??bar
上面的表達式等價于:

(obj === undefined || obj === null) ? obj : (obj.foo === undefined || obj.foo === null) ? obj.foo : obj.foo.bar

3.區(qū)分對象值和原始值
下面的函數(shù)用來檢測x是否是一個對象值:

function isObject(x) { return (typeof x === "function" || (typeof x === "object" && x !== null)); }
問題: 上面的檢測比較復雜,是因為typeof把函數(shù)和對象看成是不同的類型,而且typeof null返回"object".

解決辦法: 下面的方法也經(jīng)常用于檢測對象值:

function isObject2(x) { return x === Object(x); }
警告:你也許認為這里可以使用instanceof Object來檢測,但是instanceof是通過使用使用一個對象的原型來判斷實例關(guān)系的,那么沒有原型的對象怎么辦呢:

> var obj = Object.create(null); > Object.getPrototypeOf(obj) null
obj確實是一個對象,但它不是任何值的實例:

> typeof obj 'object' > obj instanceof Object false
在實際中,你可能很少遇到這樣的對象,但它的確存在,而且有它的用途.

譯者注:Object.prototype就是一個默認存在的,沒有原型的對象

>Object.getPrototypeOf(Object.prototype)null>typeof Object.prototype'object'>Object.prototype instanceof Object false

4.原始值的類型是什么?
typeof是最好的用來查看某個原始值的類型的方式.

> typeof "abc" 'string' > typeof undefined 'undefined'
問題: 你必須知道typeof null的怪異表現(xiàn).

> typeof null // 要小心! 'object'
解決辦法: 下面的函數(shù)可以修復這個問題(只針對這個用例).

function getPrimitiveTypeName(x) { var typeName = typeof x; switch(typeName) { case "undefined": case "boolean": case "number": case "string": return typeName; case "object": if (x === null) { return "null"; } default: // 前面的判斷都沒通過 throw new TypeError("參數(shù)不是一個原始值: "+x); } }

更好的解決辦法: 實現(xiàn)一個函數(shù)getTypeName(),除了可以返回原始值的的類型,還可以返回對象值的內(nèi)部[[Class]]屬性.這里講了如何實現(xiàn)這個函數(shù)(譯者注:jQuery中的$.type就是這樣的實現(xiàn))

5.某個值是否是函數(shù)
typeof可以用來檢測一個值是否是函數(shù).> typeof function () {} 'function' >  typeof Object.prototype.toString 'function'

原則上說,instanceof Function也可以進行這種需求的檢測.乍一看,貌似寫法還更加優(yōu)雅.但是,瀏覽器有一個怪癖:每一個框架和窗口都有它自己的全局變量.因此,如果你將某個框架中的對象傳到另一個框架中,instanceof就不能正常工作了,因為這兩個框架有著不同的構(gòu)造函數(shù).這就是為什么ECMAScript5中會有Array.isArray()方法的原因.如果有一個能夠跨框架的,用于檢查一個對象是否是給定的構(gòu)造函數(shù)的實例的方法的話,那會很好.上述的getTypeName()是一個可用的變通方法,但也許還有一個更根本的解決方案.

6.綜述
下面提到的,應該是目前JavaScript中最迫切需要的,可以代替一些typeof目前職責的功能特性:

isDefined() (比如Object.isDefined()): 可以作為一個函數(shù)或者一個運算符
isObject()
getTypeName()
能夠跨框架的,檢測一個對象是否是指定的構(gòu)造函數(shù)的實例的機制
檢查某個變量是否已經(jīng)被聲明這樣的需求,可能沒那么必要有自己的運算符.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲欧洲一区二区天堂久久| 2020欧美日韩在线视频| 精品爆乳一区二区三区无码av| 欧美性高跟鞋xxxxhd| 欧洲成人在线视频| 日本福利视频网站| 亚洲欧美一二三区| 国产一区精品| 劲爆欧美第一页| 亚洲国产成人精品久久久国产成人一区| 999色成人| av不卡在线播放| 日本va中文字幕| 国产精品久久久久久久午夜片| 激情综合丁香| 国产精品久久久999| 极品蜜桃臀肥臀-x88av| 中文字幕欧美激情极品| www插插插无码免费视频网站| 亚洲欧美在线观看视频| 日韩电视剧在线观看免费网站| 成人免费毛片嘿嘿连载视频…| 精品成人无码一区二区三区| 极品av少妇一区二区| 国产亚洲一区二区三区在线观看| 亚洲激情在线激情| 日本大胆欧美人术艺术动态| 国产精品免费久久久久| 97视频一区| 美女视频黄是免费| 国产精品久久久久影视| 午夜精品123| 国产婷婷色一区二区三区在线| 亚洲香蕉成视频在线观看| 精品视频三区| 亚洲天堂av免费在线观看| 美国av一区二区三区| 日韩av色在线| 国产真人真事毛片| 欧美第一页在线观看| 精品国产aⅴ麻豆| 国产麻豆精品高清在线播放| 香蕉精品视频在线| 日韩成人中文字幕在线观看| 免费a v网站| 欧美另类videos粗暴黑人| 精品欧美一区二区在线观看视频| 国产av天堂无码一区二区三区| 嫩草黄色影院| 激情五月宗合网| 一区二区免费| 明星乱亚洲合成图.com| 一区二区免费看| 成人av电影天堂| 久国产精品韩国三级视频| 国产a级免费视频| 波多野结衣电车| 99视频都是精品热在线播放| 久久成年人网站| 亚洲精品国产偷自在线观看| 神马影院午夜我不卡影院| 国产成人久久久久| 国产成人免费高清| 午夜电影亚洲| 欧美成人精品一级| 亚洲国产精品网站| 日韩免费观看一区二区| 色av男人的天堂免费在线| 丝袜脚交免费网站xx| 日日噜噜噜噜久久久精品毛片| 国产在视频线精品视频www666| 国产99久久精品一区二区300| 在线观看成人免费视频| 自拍偷拍亚洲欧美日韩| 午夜日韩在线| 一级黄色大片免费看| 欧美精品久久久| 日韩大片免费观看视频播放| 欧美少妇一区二区三区| 国产精品露脸视频| 动漫成人在线观看| 真人bbbbbbbbb毛片| 九九热精彩视频| 精品免费一区二区| av黄色免费在线观看| 日本精品人妻无码77777| 欧美日韩中文在线| 丰满白嫩尤物一区二区| 国产精品123| 亚洲精品久久久久久久久久久久| 香蕉视频在线视频| 久久久久久国产精品日本| 三级黄色片网站| 后入内射无码人妻一区| 国产精品久久777777换脸| 久久你懂得1024| 国产精品日韩专区| 国产无遮挡裸体免费久久| 国产精品欧美精品| 在线免费观看中文字幕| 亚洲av综合色区无码一二三区| 亚洲免费不卡| 五月天婷婷导航| 欧洲精品一区色| 国产精品自拍小视频| 国产精品久久久久久久av福利| 综合久久综合| 久久爱91午夜羞羞| 国产日韩欧美在线视频观看| 国产精品天天狠天天看| 欧美性淫爽ww久久久久无| 特级黄国产片一级视频播放| 一根才成人网| 日韩高清有码在线| 欧美又黄又嫩大片a级| 久热国产精品视频| 欧美mv和日韩mv国产网站| 一菊综合网成人综合网| 国产一区二区亚洲| 色综合激情久久| 欧美性xxxxxx| 色综合久久中文综合久久牛| 国产欧美一区二区三区在线看蜜臀| 日日碰狠狠丁香久燥| 中文字幕日本欧美| 日韩欧美国产黄色| 欧美 日韩 国产 激情| 国产精品久久av| 国产精品日韩久久久| 国产一区二区三区在线观看免费视频| 欧产日产国产精品98| 欧美人与性动交α欧美精品图片| 国产wwwwwww| 国产永久免费| 亚洲一区二区三区影院| 欧美二区三区91| 奇米影视888狠狠狠| 狠狠干狠狠插| 国产精品热久久久久夜色精品三区| 国产精品青青在线观看爽香蕉| 国产精品不卡一区| 国产69精品久久久久9999小说| 免费在线观看一级片| 天天干天天操天天爽| 国产精品视频不卡| 日韩av一区二区在线| 亚洲第一天堂久久| 日韩欧美中文字幕在线观看| 在线天堂资源| 日韩av免费在线| 亚洲免费不卡| 大片网站久久| 在线不卡的av| 四虎精品欧美一区二区免费| 99视频在线观看一区三区| 中文字幕一区二区三区在线乱码| 国产一级免费视频| 亚洲91在线| 精品午夜一区二区三区在线观看| 成人性生交大片免费看中文网站| 国产精品一二三区视频| 国产性xxxx| 亚洲男人网站| 日韩福利一区二区三区| 久久久久久久99| 国产欧美日韩免费看aⅴ视频| jizzjizz在线| 久久99国产成人小视频| 国产福利一区二区三区视频在线| 精品久久久国产精品999| 国产农村妇女毛片精品久久莱园子| 亚洲最大成人免费视频| 精品视频一区二区三区四区| 亚洲精品日韩激情在线电影| ass极品国模人体欣赏| 国产亚洲一区字幕| 国产精品久久久久久av福利| 99一区二区三区| 亚洲欧洲精品一区二区| 香蕉视频成人在线观看| 夜夜嗨av一区二区三区网站四季av| 国产黄色在线播放| 精品久久久久久中文字幕人妻最新| 老司机精品免费视频| 99.玖玖.com| 国产一区二区视频在线播放| 久久亚洲私人国产精品va媚药| 色婷婷综合久久久久久| 免费成人美女女| 欧美超碰在线| 茄子视频成人免费观看| 国产在线观看不卡一区二区三区| 大陆一级毛片| 高清乱码毛片入口| 凸凹人妻人人澡人人添| 亚洲精品亚洲人成人网在线播放| 亚洲第一精品久久忘忧草社区| 狠狠干狠狠操视频| 国产精品福利一区二区| 成人网6969conwww| 国产乱码精品一区二区三区中文| 中文字幕精品在线视频| 91精品人妻一区二区三区四区| 欧美国产日产韩国视频| 亚洲免费视频成人| 欧美调教sm| 亚洲老妇xxxxxx| 国产精品久久久一区二区| 国产一区2区在线观看| 日本高清免费电影一区| 亚洲AV无码乱码国产精品牛牛| 战狼4完整免费观看在线播放版| 国产精品综合一区二区三区| 欧美阿v一级看视频| 欧美大片大片在线播放| av日韩在线网站| 青青草97国产精品免费观看无弹窗版| 色八戒一区二区三区| 亚洲福利在线观看视频| 四虎黄色影院| 成人亚洲激情网| 成熟妇人a片免费看网站| 深夜精品寂寞黄网站在线观看| 国产精品自拍毛片| 又嫩又硬又黄又爽的视频| 奇米影音第四色| 日韩综合网站| 日韩欧美高清在线视频| 最新精品视频| 婷婷激情5月天| 免费av网站观看| 中文字幕亚洲欧美一区二区三区| 久久夜靖品2区| 国产aa视频| 日韩精品一区二区三区丰满| 电影网一区二区| 午夜视频在线观看一区二区三区| 好看的亚洲午夜视频在线| 亚洲精品国产品国语在线app| 伦伦影院午夜日韩欧美限制| 欧美xxxxx在线视频| 亚洲码无人客一区二区三区| 日本久久久久久久久久| gv天堂gv无码男同在线观看| 成人视屏免费看| 三级视频网站在线观看| 91视频国产一区| 中文字幕在线视频第一页| 婷婷亚洲天堂| 男人天堂影院| 亚洲**2019国产| 欧洲成人在线视频| 亚洲综合激情网| 日韩大片在线观看视频| 欧美嫩在线观看| 中文字幕视频三区| 奇米四色中文综合久久| 成人在线免费在线观看| 九九热最新视频//这里只有精品| 中文字幕日本欧美| 久久不见久久见中文字幕免费| 成人久久在线| 亚洲精品一区二区二区| 国产一区二区三区四| 二区三区不卡不卡视频| 国产视频不卡一区| 五月天男人天堂| 正在播放木下凛凛xv99| 99热在这里有精品免费| 日韩精品免费观看| 亚洲国产小视频在线观看| 成年女人免费v片| 成人区精品一区二区不卡| 日本jizz中国| 欧美日韩色婷婷| 国内在线观看一区二区三区| 黄色小说在线观看视频| 这里只有精品999| 国产精品一区二区免费| 日韩亚洲在线观看| 国产精品日韩二区| 亚洲国产成人一区二区三区| 欧美亚日韩国产aⅴ精品中极品| 你微笑时很美电视剧整集高清不卡| 久久9热精品视频| 96精品视频| 日韩欧美激情四射| 国产无遮无挡120秒| 欧美特级特黄aaaaaa在线看| 97久久超碰精品国产| 亚洲综合网站久久久| 一区二区三区毛片免费| 蜜桃视频网站在线观看| 香蕉视频在线播放| 亚洲伊人成综合成人网| 81精品国产乱码久久久久久| 日日夜夜人人| 国产韩日精品| 天天草天天干| 国产精品福利视频一区二区三区| 亚洲尤物精选| 91精品国产自产在线观看永久| 国产激情偷乱视频一区二区三区| 亚洲一区二区久久| 91在线视频官网| 小向美奈子av| 欧美电影免费观看网站| 亚洲色大成网站www| 在线成人免费网站| 精品久久久久久久久久久久久久久久久| 欧美人与z0zoxxxx视频| eeuss影院www免费看| 欧美中文字幕在线播放| 国产亚洲欧美久久久久| 国产一级免费黄色片| 欧美一级二级三级视频| 久久久影院一区二区三区| 日本成人中文字幕在线视频| 日韩一本精品| 亚洲三级精品| 911精品国产| 色婷婷成人综合| 91小视频免费观看| crdy在线观看欧美| 亚洲天堂免费观看| а√天堂资源官网在线资源| 高潮毛片在线观看| 欧美日本在线视频|