web前端經典問題探討(Damon執筆) ------------------------------------------------------------------------------------ Q:代碼執行 [1,2,3].map(parseInt) 的結果? A: map循環第1次 parseInt(1,0) 分析:一、基數是0(基數的範圍 [2,36],基數不在合法範圍內的,一概返回NaN),0比較特殊也表示10進制 二、按照進制範圍依次截取字符串,獲得1 三、1*10^0 => 1 map循環第2次 parseInt(2,1) 分析:一、基數是1(基數的範圍 [2,36],基數不在合法範圍內的,一概返回NaN) 二、基數合法,故返回NaN map循環第3次 parseInt(3,2) 分析:一、基數是0(基數的範圍 [2,36],基數不在合法範圍內的,一概返回NaN),0比較特殊也表示10進制 二、按照進制範圍依次截取字符串,獲得"",故返回NaN
Q:const a={name:1} a.x=a={} console.log(a.x) //? A:
Q: var a = {n: 1} var b = a; a.x = a = {n: 2} console.log(a.x); console.log(b.x) A:
Q:(a ==1 && a== 2 && a==3) 可能爲 true 嗎? A: 解決方法1: let a={ val:0, valueOf(){ return ++this.val } } if(a ==1 && a== 2 && a==3){ console.log("success") } 解決方法2: let a={ [Symbol.toPrimitive]:((i)=>()=>++i)(0) } if(a ==1 && a== 2 && a==3){ console.log("success") } 解決方法3: let val=0 Object.defineProperty(window,'a',{ get(){ return ++val } }) if(a ==1 && a== 2 && a==3){ console.log("success") } 解決方法4: let val=0 with({ get a(){ return ++val } }){ if(a ==1 && a== 2 && a==3){ console.log("success") } }
var foo={n:1}; (function (foo) { console.log(foo.n); foo.n = 3; var foo = {n:2}; console.log(foo.n); })(foo); console.log(foo.n);
/* * 多條件for循環執行時, * 只要有一個不知足條件 * 則所有退出循環 * * * */ var i, j, k; for (i=0, j=0; i<4, j<2; i++, j++) { console.log(i, j); k = i+j; } console.log(k);