js基礎資料型別:string
、number
、boolean
、null
、undefined
、symbol
當運算子在運算時,如果運算子兩邊的資料型別不一致,那麼cpu就無法進行計算。js的編輯器會自動將運算子兩邊的資料轉換為同一型別,從而讓計算機識別並可以進行計算,這一轉換過程由編譯器自動自行,不需要程式設計師手動操作,所以稱之為隱式轉換。
字串轉換:字串 + 變數
;所有與字串相加的基礎變數都將轉換為字串。
例如:「」+變數 //將變數轉換為字串
number轉換:自增運算子(++,--),或者算術運算子(+,-,*,/,%),或者關係運算子(>,<,>=,<=,==,!=,===,!==) 變數
例如:+value //將value轉換為number型別
value-「1」 //會分別將value和1轉換為number,再進行計算
boolean轉換:!變數
例如:!value //將value轉換為boolean型別
!!value //先將value轉化為blooean,然後將value取反
undefined == null
,但是undefined !== null
nan不等於任何值,包括它自身
在進行數字計算時,boolean的true=1
,false=0
引用型別不能用==
做比較,因為棧中存在的僅僅是引用位址
== //false{}=={}//false
var a =,b=; cosole.log(a==b); //false
物件與基礎型別比較,會優先將物件轉換為字串再進行基礎型別比較。
== false //true== ! //true
[1,2,3] == 『1,2,3』 //true
console.log(==『a:1』) //false
//首先會將執行number(undefined)=nan,然後執行1+nan
console.
log(
1+undefined)
;//nan
//首先執行number(null)=0,然後執行1+0
console.
log(1+
null);
//1//首先執行number(true)=1,然後執行1+1
console.
log(1+
true);
//2//與字串相+時,+不再是數**算符,而是字串連線符,所以所有值都是字串拼接
//首先執行string(1)="1",然後執行"1"+"true"
console.
log(1+
"true");
//"1true"
//當與數字進行關係比較時,會將其他型別優先轉換為數字型別,再比較
//首先執行number("2")=2,然後執行3>2
console.
log(
3>
"2")
;//true
//字串與字串的比較並非直接轉換為數字,而是比較unicode編碼的值
//首先執行2.charcodeat()=50,10.charcodeat()=49,然後執行50>49
console.
log(
"2">
"10");
//true
//多個字元之間的字串比較,從左向右,一詞對每個字元進行比較,直到出結果為止
/* 首先對左右兩邊的第乙個字元a,進行比較,相等
其次對左右兩邊的第二個字元b,進行比較,相等
最後比較"c".charcodeat()>"d".charcodeat()
*/console.
log(
"abc"
>
"abd");
//false;
引用型別之間不能直接進行比較,因為他們棧中僅僅儲存了引用位址。
引用型別和基礎型別比較,則會先將引用型別轉換為字串,再參照基礎型別比較規則。
引用型別轉換為字串的方式為:引用變數.valueof().tostring()
valueof()
:強制轉換方法,用於獲取引用變數的原始值。同時物件的該方法可以被重寫覆蓋。
例如:
var b =
}
每呼叫一次b物件的valueof(),其b.i將+1。
//引用型別之間的比較僅僅是引用位址的比較
console.log({}=={}); //false
console.log(==); //false
//引用型別和基礎型別的比較
//首先執行.valueof()="",其次執行number("")=0,最後執行0==0
console.log(==0); //true
//這裡!優先順序高於==,所以不用進行valueof().tostring()
//首先執行!=false,其次執行number(false)=0,最後執行0==0
console.log(!==0); //true
//同上理
console.log(!{}==0); //true
//首先執行!{}=false,其次{}==false
console.log({}==!{}); //false
//首先轉化a.valueof().tostring()="[object object]",其次number("[object object]")=nan,最後nan == false
var a = {};
console.log(a == false); //false
需注意:
js 隱式轉換
1.數字number與字串string相加的就,最後會得到乙個字串string 1 3 13 2.數字number與字串string相減,最後會得到乙個數字number 1 0 1,s 0 nan 3.數字number與字串string相乘 最後會得到乙個數字number 1 10 10,s 10 ...
js 隱式轉換
其它型別轉換成布林型別 1.未聲名的變數名 undefined false 2.變數名為 null 為空 null false 3.number 0 0.0 0 0 nan false 4.空字串 false 5.其它物件 true 1 其它型別轉換為數值型 number 1.undefined n...
js隱式型別轉換
筆試題 var x 1 if function console.log x 1undefined解析 if function f function f 作為表示式,function f消失,所以在if裡面,f為未宣告 任何乙個變數,未經宣告使用都會報錯。但是,typeof其時,不會報錯,而是unde...