- typeof 檢測資料型別的邏輯運算子
- instanceof 檢測是否為某個類的例項
- constructor 檢測建構函式
- object.prototype.tostring.call 檢測資料型別的
字串「number」、字串「boolean」、字串「undefined」、字串"string"、字串"「symbol」、字串"「function」、字串「object」、字串「bigint」
- 返回的結果都是字串
- 侷限性:
+ typeof (null)=> 「object」
+ typeof 不能細分物件型別(檢測普通物件或者陣列物件等都是"object")
習題:
let a =
typeof
typeof
typeof[12
,23];
console.
log(a)
;//=>"string"
/* * typeof [12, 23] =>"object"
* typeof "object" =>"string"
* ...
*/
1、 nan!=nan 它和誰都不相等,包括和自己本身也不相等
2、isnan(值) 檢測這個值是否為有效數字,如果不是有效數字返回true,是有效數字返回false
3、 parseint 處理的值是字串,從字串的左側開始查詢有效數字字元(遇到非有效數字字元則停止查詢), 如果處理的值不是字串,需要先轉換為字串然後在開始查詢介面
4、number (值) 直接呼叫瀏覽器最底層的資料型別檢測機制來完成
+ true 1 false 0 *****==== number (true)=>1、number (false )=>0
+ null 0 undefined nan********** number (null)=>0、number (nan)=>nan
+ 字串中必須保證都是有效數字才會轉換為數字,否則都是nan,
number (「字串」)=>nan
+number("")=>0 小技巧:遇到number(值)值是非字串的想象放到if(值)
5、0 nan null undefined 轉為布林型別是假 一般借用感嘆號!轉成布林型別
let res =
parsefloat
('left:200px');
//=>nan
if(res ===
200)
else
if(res ===
nan)
elseif(
typeof res ===
'number'
)else
parseint(""
)//nan
number(""
)//0
isnan(""
)//先把""轉換為數字(隱式 number) isnan(0) false
parseint
(null
)//parseint('null') nan
number
(null
)//0
isnan
(null
)// isnan(0) false
parseint
("12px"
)//12
number
("12px"
)//nan
isnan
("12px"
)//isnan(nan) true
parsefloat
("1.6px")+
parseint
("1.2px")+
typeof
parseint
(null);
+ 1 + typeof nan => 2.6 + 'number' -> '2.6number'
isnan
(number(!
!number
(parseint
("0.8"))
));// isnan(0) false
typeof
!parseint
(null)+
!isnan
(null);
// 'booleantrue'
==true先轉換成數字,再比較。比較兩邊利用number轉換機制
number() 、number(』』) 0
let result =10+
false
+ undefined +
+'tencent'
+null
+true+;
console.
log(result)
;// 10 + 0 10
// 10 + undefined nan
// nan + 'nan'
// 'nan' + 'tencent' 'nantencent'
// 'nantencentnulltrue[object object]'
+號運算子
nan+[
]//"nan" nan+[1,3]===>"nan1,3"
nan+
//"nan[object object]"+10
//10 {}在前會被當成**塊執行, 10+{}===>"10[object object]"
在兩邊出現字串(或者物件)的情況下,加號一定是字串拼接 =>物件本身是要轉換為數字進行運算的,只不過轉換數字的過程中,需要先轉換為字串,才能轉換為數字,而一旦轉換為字串,不好意思就變為字串拼接了
物件轉換為字串 先呼叫 valueof 獲取原始值(一般都是基本型別值),則繼續呼叫 tostring()
number([
10])//"10"
number[
100,
200]
//"10,20"
== 在進行比較的時候,如果左右兩邊資料型別不一致,則需要先預設轉換為一致的資料型別,然後在進行比較
=== 絕對相等,兩邊型別一致,值也一致才相等,型別不一樣,直接不對等,不會轉換
物件==字串 物件轉換為字串
[10] == 『10』 true
null == undefined (三個等號下不相等),但是和其它任何的值都不相等
0 == null false
nan和誰(包括自己)都不相等
剩下的情況都是轉換為數字在做比較的
==
false
//true 都轉換為數字
先轉換為''
(tostring)
在轉換為數字0
(number)
false 變為數字0
!
==false
//true
運算子優先順序 !
再算比較![
] 轉換為布林值進行取反(把其它型別轉換為布林型別遵循的規律: 只有 0
/nan
/null
/undefined/
'' 五個值是false,其餘的都是true) =>
false
false
==false
true
+10
//1010+
//'10[object object]'(+
0)//'[object object]0'()
+0//'[object object]0'+0
+//'[object object]0[object object]'+0
大括號在js中太特殊了:物件、**塊(塊作用域)
此處把大括號當做乙個**塊 後面是+
0+值 這個操作是數**算(不論加誰)
++值 值++ 都是數**算
總結:
大括號在運算子前面
在沒有使用小括號處理優先順序的情況下 不認為是數**算,加小括號才算
出現在運算子的後面 認為是數**算
js高階 資料型別
基本 值 型別 string 任意字串 number 任意數字 boolean true false null null undefined undefined 物件 引用 型別 object 任意的物件 一般物件內部資料無序 function 一種特別的物件 可以執行 array 一種特別的物件 ...
web前端筆記 5 js變數和資料型別
1.由大寫或小寫字母 數字 下劃線 美元符號 組成 2.不能以數字開頭 3.嚴格區分大小寫,比如it和it不是同乙個變數 4.不能使用js中的關鍵字和保留字class 5.要盡量做到見其名,知其意,名字起的有意義一點,用小駝峰命名法 var a 布林只能有兩個值 true 或 false var x...
JS中的資料型別
js中的資料型別分為兩種 基本資料型別和引用資料型別 基本資料型別 number boolean string undefined null symbol es6中新增 引用資料型別 object array function date regexp 等 講區別之前,需要先了解堆 heap 和棧 s...