web前端经典问题探讨(Damon执笔)
------------------------------------------------------------------------------------
Q:代码执行 [1,2,3].map(parseInt) 的结果?
A:
map循环第1次
    parseInt(1,0)
    分析:1、基数是0(基数的范围 [2,36],基数不在合法范围内的,一律返回NaN),0比较特殊也表示10进制
         2、按照进制范围依次截取字符串,得到1
         3、1*10^0 => 1
map循环第2次
    parseInt(2,1)
    分析:1、基数是1(基数的范围 [2,36],基数不在合法范围内的,一律返回NaN)
         2、基数合法,故返回NaN
map循环第3次
    parseInt(3,2)
    分析:1、基数是0(基数的范围 [2,36],基数不在合法范围内的,一律返回NaN),0比较特殊也表示10进制
         2、按照进制范围依次截取字符串,得到"",故返回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);
(() => {
  let m, n;
  try {
    throw new Error();
  } catch (m) {
    (m = 10), (n = 20);
    console.log(m);
  }
  console.log(m);
  console.log(n);
})();

Damon
43 声望5 粉丝

天行健,君子以自强不息


« 上一篇
ES6+图解
下一篇 »
知识点