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

首頁 > 編程 > JavaScript > 正文

js中判斷變量類型函數typeof的用法總結

2019-11-20 09:16:46
字體:
來源:轉載
供稿:網友

1、作用:

typeof 運算符返回一個用來表示表達式的數據類型的字符串。
可能的字符串有:"number"、"string"、"boolean"、"object"、"function" 和 "undefined"。

2、常用返回值說明

表達式 返回值
typeof undefined 'undefined'
typeof null 'object'
typeof true 'boolean'
typeof 123 'number'
typeof "abc" 'string'
typeof function() {} 'function'
typeof {} 'object'
typeof [] 'object'
typeof unknownVariable 'undefined'

注意:類型返回值都是字符串、而且都是小寫打頭

3、常規應用:

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
注意:未初始化的變量,沒有被傳入參數的形參,不存在的屬性,都不會出現上面的問題,因為它們總是可訪問的,值總是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最有名的一個怪異表現(被認為是一個bug):typeof null返回了"object":

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

解決辦法: 不要使用typeof來做這項任務,用下面這樣的方法來代替:但是變量x必須事先聲明,否則會報錯。

function isDefined(x) { return x !== null && x !== undefined; }

另一個可能性是引入一個“默認值運算符”,在myValue未定義的情況下,下面的表達式會返回defaultValue:

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

(myValue !== undefined && myValue !== null) ? myValue : defaultValue

其實是下面這條語句的簡化:

myValue = myValue || defaultValue

3.區分對象值和原始值

下面的函數用來檢測x是否是一個對象值:

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

解決辦法: 下面的方法也經常用于檢測對象值:

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

> 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的怪異表現.

> typeof null // 要小心! 'object'

解決辦法: 下面的函數可以修復這個問題(只針對這個用例).

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("參數不是一個原始值: "+x);

} }

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

5.某個值是否是函數

typeof可以用來檢測一個值是否是函數.

> typeof function () {} 'function'

> typeof Object.prototype.toString 'function'

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

6.綜述

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

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

以上這篇js中判斷變量類型函數typeof的用法總結就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美—级高清免费播放| 亚洲精品久久久久中文字幕欢迎你| xvideos国产精品| 国产精品福利网| 日韩精品极品在线观看播放免费视频| 国产精品久久久av| 日韩av在线影视| 这里只有精品视频| 欧美大学生性色视频| 68精品国产免费久久久久久婷婷| 亚洲综合国产精品| 国产亚洲一区二区在线| 黑人巨大精品欧美一区二区三区| 中文字幕在线看视频国产欧美| 日韩在线视频播放| 亚洲第一av网站| 国产精品欧美久久久| 久久久久久亚洲精品中文字幕| 久久亚洲国产精品| 国产精品丝袜视频| 亚洲欧美激情在线视频| 这里精品视频免费| 亚洲综合在线小说| 日韩大片在线观看视频| 日韩av在线高清| 精品一区精品二区| 一本大道香蕉久在线播放29| 55夜色66夜色国产精品视频| 久久国产精品久久久久久| 国产日韩在线亚洲字幕中文| 国产精品久久久久影院日本| 久久精品一偷一偷国产| 久久久99久久精品女同性| 91系列在线播放| 91亚洲精品久久久| 欧美日韩国产123| 欧美性猛交丰臀xxxxx网站| 青青a在线精品免费观看| 日韩中文字幕在线| 国产日韩欧美视频| 狠狠躁夜夜躁人人爽天天天天97| 亚洲综合在线播放| 色黄久久久久久| 国产精品久久久久久久美男| 国产精品亚洲аv天堂网| 欧美成人亚洲成人| 久久久免费av| 91在线观看免费高清| 亚洲自拍偷拍网址| 国产欧美va欧美va香蕉在| 日韩av一卡二卡| 萌白酱国产一区二区| 久久久黄色av| 日韩欧亚中文在线| 91社区国产高清| 国产日本欧美在线观看| 久久久电影免费观看完整版| 精品国产网站地址| 狠狠做深爱婷婷久久综合一区| 在线免费观看羞羞视频一区二区| 欧美尤物巨大精品爽| 国产精品丝袜久久久久久高清| 精品视频中文字幕| 国产精品网红福利| www.亚洲天堂| 高清欧美一区二区三区| 亚洲黄页视频免费观看| 日韩一区二区久久久| 尤物yw午夜国产精品视频明星| 国产日韩精品一区二区| 国产91久久婷婷一区二区| 精品久久久久久| 久久精品国产清自在天天线| 91九色单男在线观看| 国内成人精品视频| 久久精品青青大伊人av| 久久久免费电影| 国产日韩av高清| 欧美xxxx做受欧美.88| 日韩电影免费在线观看中文字幕| 中文字幕亚洲综合久久筱田步美| 97不卡在线视频| 91免费电影网站| 亚洲精品v天堂中文字幕| 日韩精品免费看| 亚洲区bt下载| 亚洲黄色av网站| 国产欧美久久久久久| 国产精品爱久久久久久久| 国产精品69久久久久| 色婷婷**av毛片一区| 波霸ol色综合久久| 91免费国产视频| 欧美日韩国产精品| 国产精品网红福利| 精品国偷自产在线| 18性欧美xxxⅹ性满足| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲精品国偷自产在线99热| 中文字幕亚洲一区二区三区五十路| 国产热re99久久6国产精品| 国产小视频91| 亚洲2020天天堂在线观看| 国产精品久久久久久久久久小说| 91久热免费在线视频| 欧美激情视频在线观看| 狠狠躁天天躁日日躁欧美| 久久久精品在线观看| 色综合伊人色综合网| 成人免费网站在线看| 亚洲国产一区自拍| 精品一区二区三区电影| 国产精品美女在线观看| 久久精品国产免费观看| 欧美精品在线观看91| 欧美与欧洲交xxxx免费观看| 亚洲精品一区二区三区不| 亚洲男人的天堂在线| 国产精品专区h在线观看| 欧美第一黄色网| 亚洲天堂av电影| 日韩电影中文字幕| 久久夜色精品亚洲噜噜国产mv| 日韩免费在线视频| 国产情人节一区| 色七七影院综合| 久久久亚洲天堂| 日韩中文字幕在线视频播放| 日韩欧美成人网| 国产一区深夜福利| 日韩av免费看| 亚洲精品视频免费| 美女性感视频久久久| 亚洲视频第一页| 国产亚洲欧洲高清| 97热在线精品视频在线观看| 欧美猛少妇色xxxxx| 国产日韩欧美视频| 国产亚洲欧美日韩一区二区| 欧美一级视频免费在线观看| 亚洲色图狂野欧美| 性欧美亚洲xxxx乳在线观看| 国产91精品久久久久| 国语自产精品视频在线看抢先版图片| 亚洲精品成人久久久| 亚洲国产日韩精品在线| 成人久久一区二区三区| 精品久久久国产精品999| 欧美裸体xxxxx| 欧美极品少妇与黑人| 91视频国产高清| 亚洲精品日韩av| 精品中文字幕视频| 久久久久久久国产精品视频| 精品久久久久久久久久久| 97国产在线视频| 欧美亚洲在线观看| 日韩av影片在线观看| 国产精品日韩在线观看| 九九视频直播综合网| 国产精品私拍pans大尺度在线| 超碰精品一区二区三区乱码| 91久久久久久久久| 亚洲国语精品自产拍在线观看|