IN,TYPEOF,INSTANCEOF,===運(yùn)算符分別是干什么的?

大家好,我是IT修真院北京分院25期的學(xué)員,一枚正直純潔善良的web前端程序員

今天給大家分享一下,修真院官網(wǎng)css任務(wù)13,深度思考中的知識(shí)點(diǎn)——移動(dòng)端有哪些常見的布局方式?

1.背景介紹

在JavaScript中,有很多常見的運(yùn)算符和關(guān)鍵字,這次我們來看看其中的 in,typeof,instanceof,還有===,分別是干什么的,有什么用,和什么情況下可能會(huì)用到

2.知識(shí)剖析

2.1、IN運(yùn)算符

in 運(yùn)算符作用:就是判斷 屬性是否存在于對象中,如果存在,返回值為:true,如果不存在,則為:false

?語法:屬性 in 對象

var obj = {

name1: "jack",

age: 9,

abc: undefined

};

// 如果是對象中存在的成員或者是原型中的成員,此時(shí),返回的結(jié)果就是 trueconsole.log("name1" in obj);? // true

console.log("age" in obj);? ? // true

console.log("age123" in obj);? // false

console.log("abc" in obj);? ? ? // true

console.log("toString" in obj); // true

IN運(yùn)算符判斷數(shù)組

// in運(yùn)算符判斷數(shù)組// 對于數(shù)組來說,索引號(hào) 就是屬性vararr = ["one","two","three","four"];

arr.five ="5";

consol.log(0inarr);//trueconsol.log("one"inarr);//false,只可判斷數(shù)組的鍵值consol.log("five"inarr);//true,'five'是arr對象的屬性consol.log("length"inarr);//true

FOR IN語句

for-in語句是一種精準(zhǔn)的迭代語句,可以用來枚舉對象的屬性

var mycars = new Array();

mycars[0] = "Bens";

mycars[1] = "Volvo";

mycars[2] = "BMW";

for (var x in mycars)

{

console.log(mycars[x])

}

for-in循環(huán)輸出的屬性名順序是不可預(yù)測的,所有屬性都會(huì)被返回一次,

但返回的先后順序可能會(huì)因?yàn)g覽器而異

迭代對象變量值是null或undefined,語句會(huì)拋出錯(cuò)誤

2.2、TYPEOF

typeof在js中是一個(gè)一元操作符,可以判斷操作數(shù)的類型,其返回值有number、string、object、boolean、function、undefined。使用方式可以是typeof 操作數(shù)或typeof(操作數(shù))typeof檢測變量的數(shù)據(jù)類型,對返回值做以下說明,number 變量是數(shù)字類型

string? 變量是字符串類型

boolean 變量是布爾類型

object? 變量是對象或者nullfunction? 變量是函數(shù)undefined? 變量未定義下面是幾個(gè)實(shí)例

typeofNaN返回值:numberNaN特殊的非數(shù)字值

typeofInfinity返回值:numberInfinity無窮大特殊值

typeof 123? 返回值:number

typeof "123"? 返回值:string

typeof(true)? 返回值:booleantypeof(Date)? 返回值:function

typeof(s)? 返回值:undefined? 因?yàn)閟作為一個(gè)變量未被定義,所以這里的返回值是undefined

typeof(undefined)? 返回值:undefined

typeof(document)? 返回值:object?document是DOM下的一個(gè)對象

typeof(null)? 返回值:object

2.3、INSTANCEOF

instanceof 運(yùn)算符與 typeof

運(yùn)算符相似,用于識(shí)別正在處理的對象的類型。與 typeof 方法不同的是,

instanceof 方法要求開發(fā)者明確地確認(rèn)對象為某特定類型。

通常來講,使用 instanceof 就是判斷一個(gè)實(shí)例是否屬于某種類型。

另外,更重要的一點(diǎn)是 instanceof 可以在繼承關(guān)系中用來判斷一個(gè)實(shí)例是否屬于它的父類型。

例如:

functionPerson(){};varp =newPerson();console.log(pinstanceofPerson);//true

2.4、===

“===”用于嚴(yán)格比較,只要數(shù)據(jù)類型不匹配就返回flase。

1、如果類型不同,就[不相等]

2、如果兩個(gè)都是數(shù)值,并且是同一個(gè)值,那么[相等];

(!例外)的是,如果其中至少一個(gè)是NaN,那么[不相等]。

(判斷一個(gè)值是否是NaN,只能用isNaN()來判斷)

3、如果兩個(gè)都是字符串,每個(gè)位置的字符都一樣,那么[相等];否則[不相等]。

4、如果兩個(gè)值都是true,或者都是false,那么[相等]。

5、如果兩個(gè)值都引用同一個(gè)對象或函數(shù),那么[相等];否則[不相等]。

6、如果兩個(gè)值都是null,或者都是undefined,那么[相等]。

var a = 3;

var b = "3";

console.log(a===b) //返回 false;//因?yàn)閍,b的類型不一樣;

3.常見問題

JS運(yùn)算符 == 和 === 之間有什么不一樣?

4.解決方案

===用于嚴(yán)格比較,只要數(shù)據(jù)類型不匹配就返回flase。

首先,== equality 等同,=== identity 恒等。

==, 兩邊值類型不同的時(shí)候,要先進(jìn)行類型轉(zhuǎn)換,再比較。

===,不做類型轉(zhuǎn)換,類型不同的一定不等。

下面分別說明:

先說 ===,這個(gè)比較簡單。下面的規(guī)則用來判斷兩個(gè)值是否===相等:

1、如果類型不同,就[不相等]

2、如果兩個(gè)都是數(shù)值,并且是同一個(gè)值,那么[相等];

(!例外)的是,如果其中至少一個(gè)是NaN,那么[不相等]。

(判斷一個(gè)值是否是NaN,只能用isNaN()來判斷)

3、如果兩個(gè)都是字符串,每個(gè)位置的字符都一樣,那么[相等];否則[不相等]。

4、如果兩個(gè)值都是true,或者都是false,那么[相等]。

5、如果兩個(gè)值都引用同一個(gè)對象或函數(shù),那么[相等];否則[不相等]。

6、如果兩個(gè)值都是null,或者都是undefined,那么[相等]。

再說 ==,根據(jù)以下規(guī)則:

1、如果兩個(gè)值類型相同,進(jìn)行 === 比較。

2、如果兩個(gè)值類型不同,他們可能相等。根據(jù)下面規(guī)則進(jìn)行類型轉(zhuǎn)換再比較:

a、如果一個(gè)是null、一個(gè)是undefined,那么[相等]。

b、如果一個(gè)是字符串,一個(gè)是數(shù)值,把字符串轉(zhuǎn)換成數(shù)值再進(jìn)行比較。

c、如果任一值是 true,把它轉(zhuǎn)換成 1 再比較;如果任一值是 false,把它轉(zhuǎn)換成 0 再比較。

d、如果一個(gè)是對象,另一個(gè)是數(shù)值或字符串,把對象轉(zhuǎn)換成基礎(chǔ)類型的值再比較。

對象轉(zhuǎn)換成基礎(chǔ)類型,利用它的toString或者valueOf方法。

js核心內(nèi)置類,會(huì)嘗試valueOf先于toString;

例外的是Date,Date利用的是toString轉(zhuǎn)換。

e、任何其他組合,都[不相等]。

//舉例:

"1" == true

//類型不等,true會(huì)先轉(zhuǎn)換成數(shù)值 1,現(xiàn)在變成 "1" == 1,//再把"1"轉(zhuǎn)換成 1,比較 1 == 1, 相等。//= 賦值運(yùn)算符//== 等于//=== 嚴(yán)格等于//例:var a = 3;

var b = "3";

a==b 返回 true

console.log(a===b) //返回 false//因?yàn)閍,b的類型不一樣//===用來進(jìn)行嚴(yán)格的比較判斷

5.編碼實(shí)戰(zhàn)

6.擴(kuò)展思考

大家都知道js中可以使用typeof來判斷變量的基本類型,如:

console.log(typeof '111'); ?????????????// "string"

console.log(typeof 22); ?????????????????// "number"

console.log(typeof a); ???????????????????// "undefined"

console.log(typeof undefined); ??// "undefined"

console.log(typeof []); ??????????????????// "object"

但是這個(gè)方法不適用于來判斷數(shù)組,因?yàn)椴还苁菙?shù)組還是對象,都會(huì)返回object,這就需要我們需求其他的方法,辣么判斷數(shù)組可以用什么方法呢?

//1、constructor? 屬性//這個(gè)屬性在我們使用js系統(tǒng)或者自己創(chuàng)建的對象的時(shí)候,會(huì)默認(rèn)的加上,保存著用于創(chuàng)建當(dāng)前對象的函數(shù),例如:

var arr = [1,2,3];? //創(chuàng)建一個(gè)數(shù)組對象arr.prototype.constructor = Array;//這一句是系統(tǒng)默認(rèn)加上的,指向這個(gè)對象的原型方法//所以我們就可以這樣來判斷:alert(arr.constructor === Array);// true//

2、instanceof

instanceof是檢測對象的原型鏈?zhǔn)欠裰赶驑?gòu)造函數(shù)的prototype對象的,所以我們也可以用它來判斷:

var arr = [1,2,3];

alert(arr instanceof Array);? // true//

3.Array.isArray()方法ECMAScript5新增了Array.isArray()方法,

支持這個(gè)方法發(fā)的瀏覽器有IE9+,Firefox4+,Safari5+,Opera10.5+和Chromeif(Array.isArray(value)){

}

7.參考文獻(xiàn)

JavaScript高級程序設(shè)計(jì)

8.更多討論

在日常編程中,你還使用過別的有意思的運(yùn)算符嗎?


ppt

視頻鏈接:密碼: inb6

技能樹.IT修真院

“我們相信人人都可以成為一個(gè)工程師,現(xiàn)在開始,找個(gè)師兄,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷茫”。

這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化,成長可見化,師兄1對1免費(fèi)指導(dǎo)??靵砼c我一起學(xué)習(xí)吧?!

猛戳這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容