大家好,我是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.更多討論
在日常編程中,你還使用過別的有意思的運算符嗎?
視頻鏈接:密碼: inb6
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現在開始,找個師兄,帶你入門,掌控自己學習的節奏,學習的路上不再迷茫”。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學習路線,學習透明化,成長可見化,師兄1對1免費指導。快來與我一起學習吧?!