摘要:的使用這是一個(gè)運(yùn)算符,不是方法檢測數(shù)據(jù)類型,返回的結(jié)果是一個(gè)字符串類型。在檢查相等性時(shí),不能把和轉(zhuǎn)換成其他值。
1 typeof的使用;這是一個(gè)運(yùn)算符,不是方法
1.1檢測數(shù)據(jù)類型,返回的結(jié)果是一個(gè)字符串類型。有六種可能:number boolean string object function undefined
注意typeof(null) 返回的是 : object
1.2 typeof 可以用于被聲明 或者未被聲明 的變量;但是未被聲明 的變量不能用其他運(yùn)算符運(yùn)算,之外的其他運(yùn)算符的話,會(huì)引起錯(cuò)誤,因?yàn)槠渌\(yùn)算符只能用于已聲明的變量上。
1.3 對(duì)于基本數(shù)據(jù)類型(Number Boolean String null undefined) 以及引用類型 object的typeof值
1.3.1類 : Object Function Array String Boolean Number Date ;這些未初始化為實(shí)例的類的typeof類型為function
function test (){ } console.log(Object);//function Object() { [native code] } console.log(typeof Object);//function console.log(Array);//function Array() { [native code] } console.log(typeof Array);//function console.log(Function);//function Function() { [native code] } console.log(typeof Function);//function console.log(String);//function String() { [native code] } console.log(typeof String);//function console.log(test);//function test(){ } console.log(typeof test);//function
1.3.2 對(duì)象的創(chuàng)建方式是用關(guān)鍵字 new 后面跟上實(shí)例化的類的名字,當(dāng)將一個(gè)函數(shù)通過new實(shí)例化之后,那么就創(chuàng)建了一個(gè)對(duì)象
function test (){ } var obj = new test(); console.log(obj.constructor);//function test(){} console.log(obj);//test{} console.log(typeof obj);//Object var obj1 = new Array(); console.log(obj1.constructor);//function Array() { [native code] } console.log(obj1);//[] console.log(typeof obj1);//Object var obj2 = new Function(); console.log(obj2.constructor);//function Function() { [native code] } console.log(obj2);//function anonymous() {} console.log(typeof obj2);//function var obj3 = new String(); console.log(obj3.constructor);//function String() { [native code] } console.log(obj3);//String {length: 0, [[PrimitiveValue]]: ""} console.log(typeof obj3);//object var obj4 = new Object(); console.log(obj4.constructor);//function Object() { [native code] } console.log(obj4);//Object {} console.log(typeof obj4);//object
1.3.3 基本數(shù)據(jù)類型的typeof的值
1.3.5 通過上面分析我們發(fā)現(xiàn)typeof可以判斷基本數(shù)據(jù)類型,但是對(duì)于復(fù)雜數(shù)據(jù)類型,返回都是object,那么如何檢測object的"類"呢?也就是說,如何檢測一個(gè)對(duì)象是由哪個(gè)構(gòu)造函數(shù)創(chuàng)建的呢?
這個(gè)時(shí)候就要用到 instanceof 了;語法: obj instanceof Type ,會(huì)沿著對(duì)象的原型鏈一層層的找,如果找到由Type類型的則返回true,否則返回false;
function test (){ } var obj = new test(); console.log(obj.constructor);//function test(){} console.log(obj);//test{} console.log(typeof obj);//Object console.log(obj instanceof test);//true 表示obj對(duì)象時(shí)test這個(gè)構(gòu)造函數(shù)產(chǎn)生的
2 null undefined
2.1 null是一個(gè)表示"無"的對(duì)象,轉(zhuǎn)化為數(shù)值的時(shí)候值為0;典型的用法是:
用來初始化一個(gè)變量,該變量將來可能會(huì)被賦值成一個(gè)對(duì)象
用來和一個(gè)已經(jīng)初始化的對(duì)象進(jìn)行比較,這個(gè)變量可以是一個(gè)對(duì)象,也可以不是一個(gè)對(duì)象
當(dāng)函數(shù)的參數(shù)期望是對(duì)象時(shí),被用作參數(shù)傳入
當(dāng)函數(shù)返回值期望是對(duì)象時(shí),被當(dāng)做返回值輸出
刪除事件綁定,事件本身是一個(gè) null ,是一個(gè)空的對(duì)象,可以添加
作為對(duì)象原型鏈的終點(diǎn)
2.2 undefined 是一個(gè)表示"無"的原始值,轉(zhuǎn)化為數(shù)值的時(shí)候值為0 ;典型用法是:
變量被聲明了,但是沒有賦值,那么該變量的值就是undefined
調(diào)用一個(gè)函數(shù)的時(shí)候,如果應(yīng)該提供的參數(shù)沒有提供,那么該參數(shù)默認(rèn)是undefined
如果一個(gè)對(duì)象的屬性沒有賦值,那么該屬性值為undefined
函數(shù)沒有返回值的時(shí)候,默認(rèn)返回undefined;
2.3 如何區(qū)分二者?
== 運(yùn)算符只比較值,不進(jìn)行類型的比較,比較之前會(huì)進(jìn)行隱式轉(zhuǎn)化,null==undefined 返回true.
=== 區(qū)分兩者,不僅僅比較內(nèi)容,還比較數(shù)據(jù)類型 null===undefined false
如何判斷一個(gè)變量是null還是undefined?
如何確定一個(gè)變量是undefined;
var exp = undefined ;//var exp ;如果不進(jìn)行賦值的話,結(jié)果也是undefined
//這種方法是錯(cuò)誤的,因?yàn)閚ull==undefined 返回true;
if(exp == undefined){
console.log("exp變量是undefined");
}
//這種方法才是正確的,注意undefined加"" ,因?yàn)閠ypeof返回的值是一個(gè)字符串類型的
if(typeof(exp) == "undefined"){
console.log("exp變量是undefined");
}
以下附上== 運(yùn)算符的W3C解釋,方便讀者回憶基礎(chǔ)
執(zhí)行類型轉(zhuǎn)化遵循的規(guī)則: 如果一個(gè)運(yùn)算數(shù)是 Boolean 值,在檢查相等性之前,把它轉(zhuǎn)換成數(shù)字值。false 轉(zhuǎn)換成 0,true 為 1。 如果一個(gè)運(yùn)算數(shù)是字符串,另一個(gè)是數(shù)字,在檢查相等性之前,要嘗試把字符串轉(zhuǎn)換成數(shù)字。 如果一個(gè)運(yùn)算數(shù)是對(duì)象,另一個(gè)是字符串,在檢查相等性之前,要嘗試把對(duì)象轉(zhuǎn)換成字符串。 如果一個(gè)運(yùn)算數(shù)是對(duì)象,另一個(gè)是數(shù)字,在檢查相等性之前,要嘗試把對(duì)象轉(zhuǎn)換成數(shù)字。 還遵循以下轉(zhuǎn)化規(guī)則: 值 null 和 undefined 相等。 在檢查相等性時(shí),不能把 null 和 undefined 轉(zhuǎn)換成其他值。 如果某個(gè)運(yùn)算數(shù)是 NaN,等號(hào)將返回 false,非等號(hào)將返回 true。 如果兩個(gè)運(yùn)算數(shù)都是對(duì)象,那么比較的是它們的引用值。如果兩個(gè)運(yùn)算數(shù)指向同一對(duì)象,那么等號(hào)返回 true,否則兩個(gè)運(yùn)算數(shù)不等。
我覺得可以進(jìn)行再簡化,來進(jìn)行解釋這個(gè)比較過程:
如果其中一個(gè)是布爾類型則先將布爾類型轉(zhuǎn)化 為0 或者 1 ; 如果一個(gè)是對(duì)象,和字符串、 數(shù)字 或者 布爾類型 進(jìn)行比較的時(shí)候則將對(duì)象轉(zhuǎn)化為原始值,對(duì)象通過toString valueOf 查看原始值,然后在與字符串 數(shù)字 布爾類型進(jìn)行比較
如何確定一個(gè)變量是null
var exp = null;
//以下兩種是不正確的
if(!exp){ //0 或者undefined同樣可以進(jìn)入if語句
console.log("該變量是null");
}
if(exp == null ){ //undefined == null 返回true
console.log("該變量是null")
}
//下面這種才是正確判斷null 類型的
if(typeof(exp) == "object" && exp == null){ //同時(shí)進(jìn)行類型和內(nèi)容的判斷
console.log("該變量是null");
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81783.html
摘要:本文將講解我目前所知道的判斷數(shù)據(jù)類型的方法。數(shù)據(jù)類型一共有種除了之外的種屬于原始數(shù)據(jù)類型。等價(jià)于問題四的返回值是什么答案。 本文將講解我目前所知道的判斷JavaScript數(shù)據(jù)類型的方法。JavaScript數(shù)據(jù)類型一共有7種: Undefined Null Boolean String Symbol Number Object 除了Object之外的6種屬于原始數(shù)據(jù)類型。有時(shí),我...
摘要:和這三種基本的數(shù)據(jù)類型,都有對(duì)應(yīng)的引用包裝類型和。應(yīng)用于引用類型的判斷,所以對(duì)于這三類基本類型沒有什么意義。 JS 中的類型判斷 js中的數(shù)據(jù)類型 基本數(shù)據(jù)類型 undefined、number、string、boolean 引用數(shù)據(jù)類型 null、Object、Number、String、Boolean、Function、Array、Date、RegExp、Error、Argumen...
摘要:第十六天筆記基礎(chǔ)語法區(qū)分大小寫是一種區(qū)分大小寫的語言的關(guān)鍵字變量名函數(shù)名以及任何其他的標(biāo)識(shí)符必須適應(yīng)一致的大小寫形勢臥龍前端空格和換行并不是的語法內(nèi)容可有可無建議使用將代碼書寫的更加整潔美觀更有可讀性可選的分號(hào)分號(hào)可選項(xiàng)語法并不是強(qiáng)制要 第十六天筆記 JavaScript 基礎(chǔ)語法 區(qū)分大小寫 JavaScript是一種區(qū)分大小寫的語言 JavaScript的關(guān)鍵字 變量名 函...
摘要:所以不論你媽媽是喊,狗蛋回家吃飯了,還是喊小明回家吃飯了,其實(shí)喊的都是你。當(dāng)然的嘛狗蛋買了件新衣服,小明當(dāng)然就有這件新衣服了。。。 上一章--原型鏈講解:傳送門:https://segmentfault.com/a/11... 在上一章講解原型鏈時(shí)提到了:所有的引用類型都有一個(gè)_proto_屬性,稱之為隱式原型。那么引用類型是什么鬼? 盡量簡單的講解一下javascript中的數(shù)據(jù)類...
摘要:所以不論你媽媽是喊,狗蛋回家吃飯了,還是喊小明回家吃飯了,其實(shí)喊的都是你。當(dāng)然的嘛狗蛋買了件新衣服,小明當(dāng)然就有這件新衣服了。。。 上一章--原型鏈講解:傳送門:https://segmentfault.com/a/11... 在上一章講解原型鏈時(shí)提到了:所有的引用類型都有一個(gè)_proto_屬性,稱之為隱式原型。那么引用類型是什么鬼? 盡量簡單的講解一下javascript中的數(shù)據(jù)類...
閱讀 944·2021-11-23 09:51
閱讀 1004·2021-11-18 10:02
閱讀 1942·2021-09-10 11:27
閱讀 3153·2021-09-10 10:51
閱讀 791·2019-08-29 15:13
閱讀 2077·2019-08-29 11:32
閱讀 2509·2019-08-29 11:25
閱讀 3055·2019-08-26 11:46