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

首頁 > 編程 > JavaScript > 正文

判斷js中各種數據的類型方法之typeof與0bject.prototype.toString講解

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

1、typeof(param) 返回param的類型(string)

這種方法是JS中的定義的全局方法,也是編譯者們最常用的方法,優點就是使用簡單、好記,缺點是不能很好的判斷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));


結果為:
復制代碼 代碼如下:

string
object
number
boolean
object
object
undefined
object
function
object

2、Object.prototype.toString().call(param) 返回param的類型(string,格式是[object class])

這個方法能支持絕大多數類型的判斷,jquery封裝的類型判斷就用的這個方法??赡苡行┤丝雌饋碛悬c迷茫,我來給大家分解一下。

1)call(param)函數

a.fun().call(b)的意思在js中是指,讓對象b來代替a,然后執行a的fun函數,寫個例子:

復制代碼 代碼如下:

function Class1()
{
    this.name = "class1";

    this.showNam = function()
    {
        alert(this.name);
    }
}

function Class2()
{
    this.name = "class2";
}

var c1 = new Class1();
var c2 = new Class2();

c1.showNam.call(c2);


運行結果,輸出的為class2,而不是class1,這就相當于是方法繼承。
所以,Object.prototype.toString().call(param)的意思其實就是,param.prototype.toString(),那么我們為什么不直接寫param.prototype.toString(),而是用call()繞一下呢,下面請看2來了解。

2)Object.prototype.toString()

Object是個什么東東呢?,Script56.chm(就是M$官方教程)上說:Obect提供所有 JScript對象通用的功能,其實Object就是所有js對象的祖先,是一個概念,js中的所有對象就是Object的實例,然后不同的對象重寫自己獨立的方法。而prototype,大家就沒必要追究太深了,它就是返回一個原型的引用,然可以可以動態的給原型添加方法和屬性
一個小例子

復制代碼 代碼如下:

function class(){
  this.name = "class";
  this.showName = function(){
    alert(this.name);
  }
}
var obj = new class();
obj.showName();
class.prototype.showNameContact = function(){
  alert("prototype test"+this.name);
}
obj.showNameContact();

那么就會分別輸出 class和prototype test class,本來構造函數class() 里是沒有定義showNameContact函數的,而通過prototype我們就可以給對象原型動態添加函數,new的示例中自然就會有了。所以Object.prototype.toString()的意思就是執行Object這個祖先中的toString方法。

那么toString()是干嘛的呢?很多js手冊中對toString()函數是這樣定義的:
toString() 方法可把一個邏輯值轉換為字符串,并返回結果,語法為:booleanObject.toString()。剛才我說了,js中的對象都是繼承的Object,這些對象都自定義的有函數或者重構了Object的部分函數,而且它們都對toString()函數進行了重寫。所以我們不能想1中直接寫param.prototype.toString()這樣就執行的是param自己重寫后的toString()函數了。

好了,到關鍵的時刻了,toString()到底是干嘛的呢,有什么作用呢?

在ES3中,Object.prototype.toString方法的規范如下:

Object.prototype.toString()

在toString方法被調用時,會執行下面的操作步驟:

1. 獲取this對象的[[Class]]屬性的值.

2. 計算出三個字符串"[object ", 第一步的操作結果Result(1), 以及 "]"連接后的新字符串.

3. 返回第二步的操作結果Result(2).

在ES3中,規范文檔并沒有總結出[[class]]內部屬性一共有幾種,不過我們可以自己統計一下,原生對象的[[class]]內部屬性的值一共有10種.分別是:"Array", "Boolean", "Date", "Error", "Function", "Math", "Number", "Object","RegExp", "String".所以Object.prototype.toString()的輸出結果就是這種格式的字符串[object Array],[object Boolean]。

在ES5.1中,除了規范寫的更詳細一些以外,Object.prototype.toString方法和[[class]]內部屬性的定義上也有一些變化,Object.prototype.toString方法的規范如下:

Object.prototype.toString ( )
在toString方法被調用時,會執行下面的操作步驟:

1 如果this的值為undefined,則返回"[object Undefined]".
2 如果this的值為null,則返回"[object Null]".
3 讓O成為調用ToObject(this)的結果.
4 讓class成為O的內部屬性[[Class]]的值.
5 返回三個字符串"[object ", class, 以及 "]"連接后的新字符串.

可以看出,比ES3多了1,2,3步.第1,2步屬于新規則,比較特殊,因為"Undefined"和"Null"并不屬于[[class]]屬性的值。經統計,可返回的類型有"Arguments", "Array", "Boolean", "Date", "Error", "Function", "JSON", "Math", "Number", "Object", "RegExp", "String"比ES3多了2種分別是arguments對象的[[class]]成了"Arguments",而不是以前的"Object",還有就是多個了全局對象JSON,它的[[class]]值為"JSON"。

最后的最后提醒大家,Object.prototype.toString().call(param)返回的[object class]中class首字母是大寫,像JSON這種甚至都是大寫,所以,大家判斷的時候可以都轉換成小寫,以防出錯,Object.prototype.toString().call(param).toLowerCase()即可。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97在线日本国产| 情事1991在线| 日韩精品欧美国产精品忘忧草| 精品人伦一区二区三区蜜桃网站| 日韩欧美亚洲成人| 7777精品视频| 国产精品福利小视频| 最新91在线视频| 欧美做爰性生交视频| 国产精品久久久久免费a∨大胸| 欧美综合在线观看| 久久在线免费观看视频| 97超视频免费观看| 亚洲天堂av在线播放| 欧美亚洲另类视频| 中文国产亚洲喷潮| 亚洲aⅴ日韩av电影在线观看| 欧美激情区在线播放| 欧美风情在线观看| 日韩av影片在线观看| 日本精品久久久久久久| 亚洲乱码一区二区| 精品久久久久久久久久久久久| 欧美大胆a视频| 欧美与欧洲交xxxx免费观看| 欧美精品精品精品精品免费| 久久91亚洲人成电影网站| 亚洲女人初尝黑人巨大| 精品国产一区二区三区久久久| 亚洲午夜色婷婷在线| 日韩一区二区精品视频| 欧美成人免费大片| 国产97在线|亚洲| 日本不卡视频在线播放| 国产成人jvid在线播放| 最近的2019中文字幕免费一页| 午夜精品久久久久久久久久久久久| 久久青草精品视频免费观看| 日本久久久久久久| 精品美女国产在线| 亚洲国产精品一区二区久| 国产精品露脸自拍| 国产精品久久久久久久久粉嫩av| 自拍偷拍亚洲精品| 亚洲高清一二三区| 不卡毛片在线看| 亚洲成人av在线播放| 国产一区二区激情| 欧美精品国产精品日韩精品| 久久全国免费视频| 欧美性视频精品| 欧美激情一区二区三级高清视频| 国产精品白嫩初高中害羞小美女| 91精品国产91久久久久福利| 日韩欧美福利视频| 影音先锋日韩有码| 久久久久久久久久久久久久久久久久av| 日本高清视频一区| 国产精品入口免费视| 亚洲成av人片在线观看香蕉| 在线观看日韩专区| 久久久久久18| 亚洲字幕一区二区| 日本久久久久亚洲中字幕| 国产在线a不卡| 欧美精品videos| 欧美另类在线观看| 午夜免费久久久久| 91精品视频在线看| 亚洲精品中文字| 日本在线精品视频| 福利视频一区二区| 亚洲成人黄色在线观看| 欧美最顶级的aⅴ艳星| 亚洲精品一区久久久久久| 国产精品成人av性教育| 国产精品成人免费视频| 色在人av网站天堂精品| 91精品美女在线| 国产精品高潮在线| 欧美成人中文字幕在线| 欧美壮男野外gaytube| 国产日韩欧美日韩大片| 国产精品视频公开费视频| 欧美电影在线免费观看网站| 久久福利视频导航| 久久成年人视频| 国产精品久久久久高潮| 色偷偷偷亚洲综合网另类| 亚洲a区在线视频| 揄拍成人国产精品视频| 久久久成人的性感天堂| 亚洲欧美日本精品| 亚洲欧洲免费视频| 欧美日韩国产麻豆| 欧美成年人视频| 亚洲国产毛片完整版| 欧美大片免费观看在线观看网站推荐| 亚洲精品美女网站| 98视频在线噜噜噜国产| 欧美激情喷水视频| 亚洲成av人影院在线观看| 欧美成人精品激情在线观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 国产国语videosex另类| 国产成人久久精品| 欧美福利视频在线| 欧美成人精品影院| 国产精品看片资源| 亚洲精品女av网站| 久久久久久久久久久成人| 精品久久久视频| 97香蕉超级碰碰久久免费的优势| 98视频在线噜噜噜国产| 伊人久久久久久久久久| 91手机视频在线观看| 夜夜嗨av色综合久久久综合网| 中文字幕日韩在线视频| 亚洲娇小xxxx欧美娇小| 亚洲成人黄色网| 成人欧美在线观看| 日韩视频免费在线| 欧美国产视频一区二区| 日韩黄色高清视频| 久久久精品国产网站| 国产精品一区av| 日韩在线小视频| 精品国产视频在线| 亚洲一区美女视频在线观看免费| 久久精视频免费在线久久完整在线看| 日韩中文字幕在线播放| 国产成人jvid在线播放| 91欧美激情另类亚洲| 中文字幕不卡av| 欧美成人在线网站| 亚洲成人a级网| 亚洲精品久久久久久久久久久久| 亚洲在线观看视频网站| xvideos成人免费中文版| 8x海外华人永久免费日韩内陆视频| 国产精品第10页| 国产中文字幕91| 国产91色在线| 国产视频精品久久久| 中文字幕精品av| 久久精品小视频| 91免费看国产| 精品国产乱码久久久久久婷婷| 色av吧综合网| 亚洲一区二区三区成人在线视频精品| 91高潮在线观看| 亚洲一区二区三区777| 激情久久av一区av二区av三区| 久久久久久久久综合| 国产美女扒开尿口久久久| 久久夜精品va视频免费观看| 国产亚洲激情视频在线| 4p变态网欧美系列| 亚洲一区二区三区在线视频| 日韩精品在线看| 亚洲免费人成在线视频观看| 欧美激情图片区| 国产精品极品美女在线观看免费| 久久久久久国产精品|