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

首頁 > 編程 > JavaScript > 正文

javascript中怎么做對象的類型判斷

2019-11-20 21:44:35
字體:
來源:轉載
供稿:網友

最近在翻看John Resig的大作《Pro JavaScript Techniques》,里面講到了如何做javascript的類型判斷的問題。文中介紹了兩種方式,一種是使用typeof,另一種是使用constructor。略感遺憾的是作為jquery的作者,他盡然沒有介紹jquery使用的類型判斷方式。不過沒有關系,我在這里給大家一起總結下。

在這里我首先像大家推薦一個很好用的在線編輯器:http://jsfiddle.net/。他提供了jquery、mootools、prototype和YUI三個主流js框架的各個版本,當你需要編寫簡單的js測試程序的時候可以直接使用它。省去了打開編輯軟件,創建各種類型文件的步驟。編輯代碼之后,點擊[Run]按鈕,一切搞定。

1.typeof

typeof是我們在做類型判斷時最常用的方法,他的優點就是簡單、好記,缺點是不能很好的判斷object、null、array、regexp和自定義對象。

下面是我的測試代碼:

復制代碼 代碼如下:

var str='str';
var arr=['1','2'];
var num=1;
var bool=true;
var obj={name:'test'};
var nullObj=null;
var undefinedObj=undefined;
var reg=/reg/;

function fn(){
    alert('this is a function');
}

function User(name){
    this.name=name;
}
var user=new User('user');

console.log(typeof str);
console.log(typeof arr);
console.log(typeof num);
console.log(typeof bool);
console.log(typeof obj);
console.log(typeof nullObj);
console.log(typeof undefinedObj);
console.log(typeof reg);
console.log(typeof fn);
console.log(typeof user);


代碼運行結果:

2.constructor

現在介紹一種不常使用的方法,對象構造器constructor。他的優點是支持大部分對象類型的判斷,特別是對自定義對象的判斷;缺點是不能在null和undefined上使用。

測試代碼和之前的差不多,區別就是使用XXX.constructor代替了typeof。

復制代碼 代碼如下:

var str='str';
var arr=['1','2'];
var num=1;
var bool=true;
var obj={name:'test'};
var nullObj=null;
var undefinedObj=undefined;
var reg=/reg/;
function fn(){
    alert('this is a function');
}
function User(name){
    this.name=name;
}
var user=new User('user');

console.log(str.constructor);
console.log(arr.constructor);
console.log(num.constructor);
console.log(bool.constructor);
console.log(obj.constructor);
console.log(reg.constructor);
console.log(fn.constructor);
console.log(user.constructor);

console.log(nullObj.constructor);
console.log(undefinedObj.constructor);

運行結果:

運行到 console.log(nullObj.constructor); 的時候,瀏覽器報錯:Uncaught TypeError: Cannot read property 'constructor' of null。類似的問題也發生在console.log(undefinedObj.constructor); 上面:Uncaught TypeError: Cannot read property 'constructor' of undefined。

3.Object.prototype.toString.call()

最后要介紹的是jquery中使用的方式,Object.prototype.toString.call()。優點是支持絕大多數類型的判斷,唯一的缺點是不支持自定義對象的判斷。

測試代碼如下:

復制代碼 代碼如下:

var str='str';
var arr=['1','2'];
var num=1;
var bool=true;
var obj={name:'test'};
var nullObj=null;
var undefinedObj=undefined;
var reg=/reg/;
function fn(){
    alert('this is a function');
}
function User(name){
    this.name=name;
}
var user=new User('user');

var toString=Object.prototype.toString;

console.log(toString.call(str));
console.log(toString.call(arr));
console.log(toString.call(num));
console.log(toString.call(bool));
console.log(toString.call(obj));
console.log(toString.call(reg));
console.log(toString.call(fn));
console.log(toString.call(user));
console.log(toString.call(nullObj));
console.log(toString.call(undefinedObj));

運行結果:

console.log(toString.call(user)); 的返回結果為:[object Object],不能做進一步判斷。

總結

javascript中經常使用的對象判斷方式包括:typeof、constructor和Object.prototype.toString.call()。其中typeof很好理解,他是JavaScript本身支持的語法。constructor很少使用,但是相信大家通過demo也能看懂他代表的意思。至于Object.prototype.toString.call()可能多少會讓人有點費解,他和XXX.toString()有什么區別呢,為什么不能直接使用XXX.toString()呢?

我們在瀏覽器中運行下面的代碼:查看運行結果:

null和undefined因為不存在toString()方法,所以會報錯,我們就不去管他們了。至于其他對象,通過toString()返回的內容和使用Object.prototype.toString.call()返回的內容差別很大。這是因為Object.prototype.toString()方法被設計用來返回對象類型的。String、Array、Boolean、Regexp、Number和Function都繼承自Object,同時也就繼承了Object的原型方法toString(),但是他們都對toString()進行了重寫。執行xxx.toString()時使用的是重寫后的方法,返回的結果自然會和Object.prototype.toString.call()的結果不一致。

通過上面的例子,大家一定對這三種方式有了更深刻的認識,熟悉他們的優缺點,然后可以根據自己的需要選擇合適的方式。推薦使用Object.prototype.toString.call()方法,因為他能解決絕大部分情況的判斷,在遇到返回值為[object Object]時,再使用constructor輔助判斷,看是否是自定義對象。

復制代碼 代碼如下:

var str='str';
var arr=['1','2'];
var num=1;
var bool=true;
var obj={name:'test'};
var nullObj=null;
var undefinedObj=undefined;
var reg=/reg/;
function fn(){
    alert('this is a function');
}
function User(name){
    this.name=name;
}
var user=new User('user');

console.log(str.toString());
console.log(arr.toString());
console.log(num.toString());
console.log(bool.toString());
console.log(obj.toString());
console.log(reg.toString());
console.log(fn.toString());
console.log(user.toString());
console.log(nullObj.toString());
console.log(undefinedObj.toString());

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国内精品视频| 日韩精品电影网| 亚洲www永久成人夜色| 亚洲女同精品视频| 欧美日韩aaaa| 欧美夜福利tv在线| 一区二区亚洲欧洲国产日韩| 中文字幕不卡av| 国外日韩电影在线观看| 国产一区二区三区视频免费| 欧美性猛交丰臀xxxxx网站| 91av在线免费观看| 在线成人中文字幕| 亚洲第一中文字幕| 久久噜噜噜精品国产亚洲综合| 欧美与欧洲交xxxx免费观看| 亚洲男人天堂网| 性色av香蕉一区二区| 91成人在线播放| 亚洲国产精彩中文乱码av在线播放| 国产精品18久久久久久麻辣| 国产97人人超碰caoprom| 美女福利视频一区| 日韩av在线免费观看| 国产成人精品综合| 欧美成人三级视频网站| 欧美精品电影免费在线观看| 日韩电影在线观看永久视频免费网站| 国产精品福利久久久| 欧美日韩综合视频| 日韩av在线看| 中文字幕在线观看亚洲| www.久久久久| 夜夜嗨av一区二区三区四区| 欧美日韩高清区| 51ⅴ精品国产91久久久久久| 日韩电影视频免费| 久久久天堂国产精品女人| 欧美日韩免费观看中文| 亚洲va欧美va国产综合久久| 色偷偷亚洲男人天堂| 亚洲第一福利网站| 97成人精品区在线播放| 亚洲乱码国产乱码精品精| 亚洲精品美女久久久久| 992tv成人免费视频| 成人xvideos免费视频| 亚洲精品综合久久中文字幕| 韩剧1988在线观看免费完整版| 国产色综合天天综合网| 国产91网红主播在线观看| 日韩高清人体午夜| 国产成人综合久久| www国产精品视频| 亚洲乱码av中文一区二区| 中文字幕欧美精品日韩中文字幕| 久久精品视频一| 在线国产精品播放| 狠狠躁天天躁日日躁欧美| 国产精品av电影| 伊人亚洲福利一区二区三区| 欧美日韩精品在线| 538国产精品一区二区免费视频| 亚洲第一国产精品| 国产裸体写真av一区二区| 欧美日韩视频在线| 精品爽片免费看久久| 中文字幕日韩欧美精品在线观看| 狠狠爱在线视频一区| 日韩在线观看网站| 欧美最猛性xxxxx亚洲精品| 欧美理论片在线观看| 九九综合九九综合| 国产欧美va欧美va香蕉在线| 欧美又大粗又爽又黄大片视频| 一本色道久久88亚洲综合88| 久久久久久久久国产精品| 欧美另类交人妖| 久久久伊人欧美| 色av中文字幕一区| 欧美福利视频在线观看| 亚洲一区二区福利| 欧美一区二区三区免费观看| 精品国产精品三级精品av网址| 一区二区三区视频免费| 亚洲网站在线播放| 精品日韩视频在线观看| 97久久精品人人澡人人爽缅北| 亚洲全黄一级网站| 欧美日韩国产二区| 青青久久av北条麻妃黑人| 国产91久久婷婷一区二区| 久久国产加勒比精品无码| 欧美精品一区二区三区国产精品| 欧美极品欧美精品欧美视频| 欧美孕妇孕交黑巨大网站| 欧美大片在线影院| 成人免费高清完整版在线观看| 精品国产一区二区三区久久久| 日韩中文字幕视频在线观看| 97涩涩爰在线观看亚洲| 久久精品国产一区二区三区| 亚洲精品国产suv| 欧美视频在线观看免费网址| 亚洲欧美制服另类日韩| 欧美日韩在线第一页| 国产精品国模在线| 日韩www在线| 91社影院在线观看| 国产精品第二页| 久久露脸国产精品| 日韩欧美在线观看视频| 国产精品欧美一区二区| 性欧美激情精品| 久久久视频免费观看| 91在线看www| 成人动漫网站在线观看| 97精品免费视频| 国产自产女人91一区在线观看| 久久久免费观看| 国产日韩欧美一二三区| 久久九九全国免费精品观看| 中文字幕亚洲欧美日韩高清| 色婷婷**av毛片一区| 国模吧一区二区三区| 欧美大尺度电影在线观看| 国产成人免费91av在线| 欧美大尺度电影在线观看| 欧美午夜美女看片| 欧美福利在线观看| 在线观看国产精品日韩av| 国产一区二区三区在线播放免费观看| 国产精品一区二区在线| 欧美色videos| 亚洲在线第一页| 欧洲成人免费aa| 日本a级片电影一区二区| 亚洲在线视频观看| 亚洲免费福利视频| 久久久久久久激情视频| 91精品视频免费看| 91丝袜美腿美女视频网站| 欧美在线视频一二三| 亚洲女成人图区| 青青草原成人在线视频| 国产精品v日韩精品| 97在线观看免费高清| 欧美日韩亚洲一区二区| 亚洲国产一区二区三区在线观看| 亚洲最大在线视频| 亚洲视频在线观看视频| 亚洲精品国产综合久久| 亚州成人av在线| 国产精品免费观看在线| 精品女厕一区二区三区| 久久网福利资源网站| 亚洲人在线观看| 欧美大成色www永久网站婷| 在线午夜精品自拍| 亚洲激情视频在线| 久久久久久亚洲精品不卡| 九九热99久久久国产盗摄| 成人欧美一区二区三区在线| 伊人久久久久久久久久久久久|