文章目录
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判断是否对错