題目一:
let result=100+true +21.2+null+undefined+"Tencent"+[ ]+null+9+false
console.log(result)
解析:
數(shù)據(jù)類型
1 基本數(shù)據(jù)類型:number boolean string bigint symbol null undefined
2 引用數(shù)據(jù)類型:object function
加號“+”只要一側(cè)出現(xiàn)string 或者 object 則結(jié)果為字符串
對象+數(shù)字,對象先變成字符串(toString()) 再變成數(shù)字
null變成數(shù)字0 硼婿;undefined變?yōu)镹aN 制妄;任何數(shù)字+NaN都為NaN
parseInt( ) parseFloat()
隱式轉(zhuǎn)換:先判斷是不是數(shù)字 isNaN(value)
加號只要一側(cè)有字符串則表示字符串拼接
空數(shù)組變?yōu)樽址强兆址? 空對象則不是({}).toString//=>[object Object]
{}+0=0
0+{}=0[object Object]
把其它數(shù)據(jù)類型轉(zhuǎn)化為數(shù)字
特定需要轉(zhuǎn)化為Number類型的
+Number([val])//=>Number('0012')=12
把其他類型轉(zhuǎn)化為字符串類型
().toString()
String()
隱式轉(zhuǎn)換:加號只要一邊是字符串,結(jié)果為字符串
alert confirm document.write()
題目二:
console.log([]==false) //true
console.log(![]==false) //true
解析:
把類型不一樣的 先轉(zhuǎn)換為Number Number([])===0
==的比較先進行隱式轉(zhuǎn)換党远,轉(zhuǎn)換為相同類型的在進行比較
幾種特例:
1 { }=={ } false //對象存儲的是地址
2 [ ]==[ ] false //數(shù)組存儲的是地址
3 NaN==NaN false
4 null==undefined true null==false false (null與undefined以外的所有值都不相等)
5 null === undefined false
6 字符串==對象 要先將對象轉(zhuǎn)換為字符串 object =》[object Object]
將其他類型轉(zhuǎn)換為布爾值
取反温艇!運算 :
!轉(zhuǎn)換為布爾值之后取反
![ ]=0
!!先轉(zhuǎn)換為布爾類型在進行比較
Boolean([value])
隱式轉(zhuǎn)換
在循環(huán)或者是判斷條件中 條件處理的結(jié)果就是布爾值
只有 ‘0,NaN ,null ,undefined,空字符串 ’轉(zhuǎn)換為布爾類型時為false刽辙,其他都為true
題目三:
var a=?可以使
if(a==1&&a==2&&a==3){
console.log(1);
console.log(a);
}
解析:
var a={
i:0,
toString(){
return ++this.i
}
}
或者
var i=0
Object.defineProperty(window,'a',{
get(){
return ++i
}
})
題目四:
let arr=[10.18,0,10,25,23]
arr=arr.map(parseInt)
console.log(arr)
[10,NaN,2,2,11 ]
解析:
arr.map((item,index)=>{
})
parseInt(10.18,0)=》parseInt('10.18',0)=>10
parseInt(0,1)=>n=1不在2-36之間輸出NaN
parseInt(10,2)=》parseInt('10',2)=》把10看成二進制=》2
parseInt(25,3)=》parseInt('25',3)=》符合三進制的只有2=>23^0=2
parseInt(23,4)=》parseInt('23',4)=》符合四進制的有23甲献,=》340+2*41=3+8=11
parseInt([value]):機制是先把value轉(zhuǎn)換為字符串宰缤,然后在字符串左側(cè)第一個數(shù)開始查找,把找到的所有有效數(shù)字字符串轉(zhuǎn)換為數(shù)字,直到遇到一個非數(shù)字字符串為止
parseInt([value],[n])把n看做n進制的數(shù)據(jù)慨灭,最后都轉(zhuǎn)換為十進制
n不寫 默認n是10 特殊些情況 開頭字符串是'0x'代表16進制
n的范圍在[2-36]之間代表相應(yīng)的多少進制(只有2到36進制)
n不在[2-36]之間的一律輸出NaN
題目五:堆棧內(nèi)存
let a={
n:1
}
let b=a
a.x=a={
n=2
}
console.log(a.x) undefined
console.log(b) =>
{
n:1,
x:{
n:2
}
}
ECstack執(zhí)行環(huán)境棧
所有的變量賦值操作朦乏,都是先創(chuàng)建值,然后在創(chuàng)建變量氧骤,最后變量指針指向向值
運算符優(yōu)先級:帶成員訪問的要優(yōu)先處理a.x=a={n:2}先處理a.x=a