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);