var a =false + 1; console.log(a);//1 var b =false==1; console.log(b);//false
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。
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判断是否对错