值----字符串
1 .使用加號(hào):數(shù)字,布爾,數(shù)組,函數(shù),預(yù)定義對(duì)象,對(duì)象直接量,字符串連接優(yōu)先級(jí)大于求和運(yùn)算。以上所有的使用加號(hào)都會(huì)轉(zhuǎn)為字符串。
2 .加號(hào)運(yùn)算符不僅優(yōu)先于連接操作,還會(huì)考慮順序,當(dāng)運(yùn)算元的類型不一致的時(shí)候,加號(hào)會(huì)嘗試把數(shù)值運(yùn)算為字符串,在執(zhí)行連接請(qǐng)求 1+1+‘1’=21 ,‘1’+1+1
3 .括號(hào)運(yùn)算符能改變一行內(nèi)表達(dá)式的運(yùn)算符順序。
4 .toString()方法。number類型是可以有參數(shù)添加的,默認(rèn)轉(zhuǎn)為10進(jìn)制表示。
5 .數(shù)組:空數(shù)組轉(zhuǎn)為空字符串"",如果數(shù)組中有null,undefined,同樣當(dāng)作空字符串處理[1,2,3,4]相當(dāng)于調(diào)用數(shù)組的join方法 將各元素用逗號(hào)“,”拼接
[1,null,2,undefined,3] "1,,2,,3"
6 .函數(shù):function a(){}轉(zhuǎn)為字符串是“function a(){}”
7 .一般對(duì)象,全都是“[object object]”
8 .1+{a:1} "1[Object Object]" "1"+{a:1} 和全面的一樣
9 .{a:1}+1 1 {a:1}+"1" 也是和前面的一樣
數(shù)字轉(zhuǎn)為字符串有了新的方法toFixed()其他es6語(yǔ)法
值--數(shù)字
1 .字符串類型 parseInt,parseFloat()也支持進(jìn)制輸入來實(shí)現(xiàn)轉(zhuǎn)化為特定的操作。
2 .乘號(hào)運(yùn)算符。變?yōu)閿?shù)字,有個(gè)bug就是可以先乘1變?yōu)閿?shù)字,然后在求和
3 .減法:2-‘1’=1 對(duì)字符串來說,如果轉(zhuǎn)換失敗,就返回NaN.
值轉(zhuǎn)化為布爾值
1 .在js中,任何數(shù)據(jù)都可以被自動(dòng)轉(zhuǎn)為布爾值,在循環(huán)判斷或參與邏輯運(yùn)算符時(shí),會(huì)自動(dòng)轉(zhuǎn)換
2 .!!會(huì)轉(zhuǎn)換到真實(shí)環(huán)境下自己的表示的布爾值
3 .還有那6個(gè)兄弟
4 .使用Boolean()方法
數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換
1 .Boolean()生成新值,新值存放原始值直接轉(zhuǎn)換的類型。
2 .Number()
3 .String()
引用類型的自動(dòng)轉(zhuǎn)換
1 .一般情況會(huì)允許出現(xiàn)這種情況么?
2 .如果非要拿對(duì)象和數(shù)組做運(yùn)算,先調(diào)用value of()--toString()
3 .null,undefined沒有toString()方法。
4 .
toString方法,返回這個(gè)對(duì)象的字符串
1 .null,undefined 沒有toSring()
2 .字符串按原始值返回
3 .布爾值按原值返回
4 .數(shù)值
1.-,+浮點(diǎn)數(shù)無效,NaN-NaN , infinity,-infinity-原值
2.整數(shù)類型必須在括號(hào)里使用這個(gè)方法 ().toString().主要是.號(hào)會(huì)發(fā)生干擾
3.toString(2,6,8)會(huì)有進(jìn)制轉(zhuǎn)換
4 .對(duì)象會(huì)全返回[object object]。但是不會(huì)識(shí)別自定義類型Object.prototype.toString.call(a)
5.Function --函數(shù)源碼(自定義函數(shù)),內(nèi)置函數(shù)-[native code] !區(qū)分內(nèi)置函數(shù)和自定義函數(shù)。果然一切皆獨(dú)象。
valueOf()
1 .null,undefined 不是對(duì)象,沒有這個(gè)方法
2 .布爾--原值值:boolean.valueOf() [native code]和toString()一樣
3 .對(duì)象Object類型及自定義對(duì)象返回原值對(duì)象。
toString()返回字符串,valueOf():返回原對(duì)象。
隱式轉(zhuǎn)換
字符串轉(zhuǎn)換場(chǎng)景
1 .+ 所有和字符串相加的基礎(chǔ)變量都將轉(zhuǎn)為字符串
2 .- 字符串和數(shù)字之間使用減號(hào)連接,則會(huì)都轉(zhuǎn)為數(shù)字進(jìn)行計(jì)算
3 .[]+{} [object,object]
4 .{}+[] 0
5 .這倆看來是以后面的為準(zhǔn),復(fù)雜數(shù)據(jù)之間的轉(zhuǎn)換
6 .當(dāng)一側(cè)為string類型,被識(shí)別為字符串拼接,會(huì)優(yōu)先將另一側(cè)的轉(zhuǎn)換為字符串類型
"1"+1,11
1+"1",11
7 .當(dāng)一側(cè)為number,另一側(cè)為原始類型,則會(huì)將原始類型轉(zhuǎn)為number
1 .1+<=
8 .當(dāng)一側(cè)為Number類型,另一側(cè)為引用類型,將引用類型和Number類型轉(zhuǎn)換成字符串后拼接
[1,2,3]+1 ,1,2,3,+1 = 1,2,31
123+{} = 123[object object]
數(shù)字轉(zhuǎn)換場(chǎng)景
1 .自增,自減運(yùn)算符 ++,--
2 .布爾值轉(zhuǎn)為數(shù)字的場(chǎng)景 1+true=2 1-false=1 第一個(gè)值是數(shù)字,運(yùn)算符后面的布爾值就會(huì)轉(zhuǎn)換為數(shù)字計(jì)算
3 .+"1" 也會(huì)轉(zhuǎn)化為數(shù)字1
4 .1*"2"=2 字符串“2”也會(huì)轉(zhuǎn)化為數(shù)字2
5 .其他的四則運(yùn)算 *,%,/,或者關(guān)系運(yùn)算符,>,<,>=,<=,==,!=,===,!=== ,如果比較運(yùn)算符兩邊都是數(shù)字類型,直接比大小,如果是非數(shù)值進(jìn)行比較的時(shí)候,會(huì)將他們轉(zhuǎn)為數(shù)字然后比較。如果兩邊都是字符串的時(shí)候,會(huì)比較字符串中字符的unicode編碼
6 .我們?cè)趯?duì)各種非Number類型運(yùn)用數(shù)學(xué)運(yùn)算符(- * /)時(shí),會(huì)先將非Number類型轉(zhuǎn)換為Number類型
1 .1-true =0
2 .1-null =1
3 .1*undefined NaN ,undefined 會(huì)轉(zhuǎn)化為NaN
4 .2*["5"] 10
5 .
如果是ts的話,肯定是不會(huì)出現(xiàn)這種情況的
布爾值轉(zhuǎn)換場(chǎng)景
1 .for 中第二個(gè) x<10
2 .while
3 .if
4 .三元計(jì)算符
5 .||,&&,左邊的操作數(shù)
6 . !變量
- undefined==null true undefined===null false
8 .NaN不等于任何值,包括他自己
9 .引用值不能進(jìn)行==比較,因?yàn)闂V写嬖诘膬H僅是引用地址
10 .對(duì)象和基礎(chǔ)類型比較,會(huì)優(yōu)先將字符串轉(zhuǎn)為基礎(chǔ)類型在進(jìn)行基礎(chǔ)類型的比較
1 .[]==[] false
2 .{}=={} false
3 .[]==false true
4 .[]==![] true
5 .[1,2,3]=="1,2,3" true 所有數(shù)組隱式轉(zhuǎn)換為字符串時(shí),只需將[]替換為""
6 .{a:1}=="a:1" false 所有對(duì)象隱式轉(zhuǎn)換為字符串時(shí),其值均為’[object Object]’
7 .引用變量.valueOf().toString()
8 .[]==[].valueOf().toString() true
9 .[]===[].valueOf().toString() false
特殊符號(hào)的轉(zhuǎn)換
1 .所有的符號(hào)都不能被轉(zhuǎn)為數(shù)字
2 .所有的符號(hào)都能被轉(zhuǎn)為布爾值 true
3 .可以被轉(zhuǎn)換成字符串symbol
比較場(chǎng)景下的數(shù)值轉(zhuǎn)換
1 .==,寬松相等,兩邊可以進(jìn)行類型轉(zhuǎn)換
2 .=== ,嚴(yán)格相等,兩邊不能進(jìn)行類型轉(zhuǎn)換
3 .字符串與數(shù)字-字符串轉(zhuǎn)為數(shù)字進(jìn)行比較
4 .其他類型與布爾類型-先把布爾值轉(zhuǎn)為數(shù)字,進(jìn)行比較
5 .對(duì)象與非對(duì)象,執(zhí)行對(duì)象的toPrimiitive 然后繼續(xù)比較
6 .假值列表 undefined,null,NaN,false,+0,-0," "。注意,{},[],都不是假值
7 .null ==undefined是true,別的都是false
8 . !0==0 false !0轉(zhuǎn)換為布爾值是true,0轉(zhuǎn)換為布爾值是false
9 . !0==1
10 .特殊 new Date(xxx) - new Date()是數(shù)值 相加是字符串
toString和valueOf
1 .都是對(duì)象的方法
2 .toString返回的是字符串,valueof返回的是原對(duì)象
3 .undefined和null沒有toString,valueOf方法
4 .包裝對(duì)象的valueOf方法返回該包裝對(duì)象對(duì)應(yīng)的原始值
5 .使用toString可以區(qū)分內(nèi)置函數(shù)和自定義函數(shù)