IN,TYPEOF,INSTANCEOF,===運算符分別是干什么的?

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

今天給大家分享一下,修真院官網css任務13,深度思考中的知識點——移動端有哪些常見的布局方式?

1.背景介紹

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

2.知識剖析

2.1、IN運算符

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

?語法:屬性 in 對象

var obj = {

name1: "jack",

age: 9,

abc: undefined

};

// 如果是對象中存在的成員或者是原型中的成員,此時,返回的結果就是 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運算符判斷數組

// in運算符判斷數組// 對于數組來說,索引號 就是屬性vararr = ["one","two","three","four"];

arr.five ="5";

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

FOR IN語句

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

var mycars = new Array();

mycars[0] = "Bens";

mycars[1] = "Volvo";

mycars[2] = "BMW";

for (var x in mycars)

{

console.log(mycars[x])

}

for-in循環輸出的屬性名順序是不可預測的,所有屬性都會被返回一次,

但返回的先后順序可能會因瀏覽器而異

迭代對象變量值是null或undefined,語句會拋出錯誤

2.2、TYPEOF

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

string? 變量是字符串類型

boolean 變量是布爾類型

object? 變量是對象或者nullfunction? 變量是函數undefined? 變量未定義下面是幾個實例

typeofNaN返回值:numberNaN特殊的非數字值

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

typeof 123? 返回值:number

typeof "123"? 返回值:string

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

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

typeof(undefined)? 返回值:undefined

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

typeof(null)? 返回值:object

2.3、INSTANCEOF

instanceof 運算符與 typeof

運算符相似,用于識別正在處理的對象的類型。與 typeof 方法不同的是,

instanceof 方法要求開發者明確地確認對象為某特定類型。

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

另外,更重要的一點是 instanceof 可以在繼承關系中用來判斷一個實例是否屬于它的父類型。

例如:

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

2.4、===

“===”用于嚴格比較,只要數據類型不匹配就返回flase。

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

2、如果兩個都是數值,并且是同一個值,那么[相等];

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

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

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

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

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

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

var a = 3;

var b = "3";

console.log(a===b) //返回 false;//因為a,b的類型不一樣;

3.常見問題

JS運算符 == 和 === 之間有什么不一樣?

4.解決方案

===用于嚴格比較,只要數據類型不匹配就返回flase。

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

==, 兩邊值類型不同的時候,要先進行類型轉換,再比較。

===,不做類型轉換,類型不同的一定不等。

下面分別說明:

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

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

2、如果兩個都是數值,并且是同一個值,那么[相等];

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

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

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

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

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

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

再說 ==,根據以下規則:

1、如果兩個值類型相同,進行 === 比較。

2、如果兩個值類型不同,他們可能相等。根據下面規則進行類型轉換再比較:

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

b、如果一個是字符串,一個是數值,把字符串轉換成數值再進行比較。

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

d、如果一個是對象,另一個是數值或字符串,把對象轉換成基礎類型的值再比較。

對象轉換成基礎類型,利用它的toString或者valueOf方法。

js核心內置類,會嘗試valueOf先于toString;

例外的是Date,Date利用的是toString轉換。

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

//舉例:

"1" == true

//類型不等,true會先轉換成數值 1,現在變成 "1" == 1,//再把"1"轉換成 1,比較 1 == 1, 相等。//= 賦值運算符//== 等于//=== 嚴格等于//例:var a = 3;

var b = "3";

a==b 返回 true

console.log(a===b) //返回 false//因為a,b的類型不一樣//===用來進行嚴格的比較判斷

5.編碼實戰

6.擴展思考

大家都知道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"

但是這個方法不適用于來判斷數組,因為不管是數組還是對象,都會返回object,這就需要我們需求其他的方法,辣么判斷數組可以用什么方法呢?

//1、constructor? 屬性//這個屬性在我們使用js系統或者自己創建的對象的時候,會默認的加上,保存著用于創建當前對象的函數,例如:

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

2、instanceof

instanceof是檢測對象的原型鏈是否指向構造函數的prototype對象的,所以我們也可以用它來判斷:

var arr = [1,2,3];

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

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

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

}

7.參考文獻

JavaScript高級程序設計

8.更多討論

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


ppt

視頻鏈接:密碼: inb6

技能樹.IT修真院

“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。

這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。快來與我一起學習吧?!

猛戳這里

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容