2022/1/13

文章目录

2022/1/13

一、javascript

var a =false + 1;
    console.log(a);//1
    var b =false==1;
    console.log(b);//false

(1)面试题:

if(typeof(a)&&(-true) + (+undefined) + ''){//typeof(a)是真,往后走,(-true)是隐式类型转换-1
    									//+undefined是NaN+字符串之后还是NaN,通过

            console.log('通过了');
    }else{
        console.log('没通过');
    }
    console.log(typeof(a));//字符串的undefined

例题二:

5 * '3'为隐式转换。

if(1 + 5 * '3'==16){

        console.log('pass');//pass
    }else{
        console.log('not pass');
    }

例3(笔试题):或运算,是假往后走

console.log(!!' '+!!'' - !!false ||'未通过');//1    1-0-0=1

分析:!!' '里面有个空格所以是true,然后两个 !!代表是true,最终是true(1)

! ! ''里面没有字符串是false,然后两个!!是true,最终是false(0)

!!false是0。

(2)预编译三道题:

1.打印出函数体

function test(){
        return a;
        a = 1 ;
        function a(){}
            var  a = 2;
        

    }
    console.log(test());//f a(){}

AO ,GO过程:

AO = {
    a : undefined->function a(){},
}

return有两个作用,一个是返回函数值,一个是终止函数

AO步骤:1、形参和变量声明

​ 2 、实参赋值给形参

​ 3、寻找函数声明

​ 4、执行

  console.log(test());//2
        function test(){
        a = 1;
        function a(){}
            var a = 2 ;
            return a  ;//在最后
      }

过程:

AO ={
    a :undefined,->function a(){},->1 ->2 
    
}
a= 1;
 function test(e){
    function e(){}
    arguments[0]=2;//实参改了,赋值为2
    console.log(e);//2
    if(a){ //下面var a之后,这边a是undefined(false)

        var b =3;
    }
    var c ;
    a =4;
    var a;
    console.log(b); //undefined,因为上面的if语句是false,所以没有赋值
    f =5;
    console.log(c);//undefined
    console.log(a);//4
 }
 var a;
 
 test(1);
console.log(a);//1
 console.log(f);//5

其中f=1不受函数作用域影响,所以在函数内赋值,函数外也可以输出。

过程:

GO ={
    a : undefined -> 1 
    test:function test(){...}
    f:5
   }
AO = {
    
    e:undefined,->1 ->function e(){}->2
	b:undefined,
    c:undefined,
    a:undefined -> 4
}

注意:变量b,他不看if语句,只要var b就 赋值undefined,他的变量声明还是在的,执行的时候才看if判断是否对错

上一篇:Linux C++/Java Socket网络编程


下一篇:【2022/1/13】thinkphp源码无差别阅读(十八)