- typeof类型:
{} / [] / null ==> object;
3 / NaN ==> number ;
" "==>String;
typeof true==>boolean;
undefined ;
function;
2.常见代码解析:
//1.要求:每隔1s依次输出123,请分析
for(var i=1;i<4;i++){ //同步
setTimeout(()=>{ //异步
console.log(i); },1000*i)
} //输出 4 4 4
//setTimeout()是一个异步方法,每一次for循环,settimeout都执行一次,但是里面的函数没有立即执行,而是被放到了任务队列,等待执行; 等主程序运行完,再调用;
//主线for循环全部执行完,才会执行任务队列里的任务,当主线执行完成后,此时i=4,所以打印3次4; //解决1:用es6的【let i=0,输出 1 2 3】
//用let来定义i,i成为块级变量,会绑定到循环体的每一次迭代中;
//解决2:把setTimeout放到一个自执行的函数中去执行,将i作为参数传进去
3循环终止条件!
var x;
for(var i=0,j=0;i<6,j<10;i++,j++){
x=i+j;
}
console.log(x); //18=9+9
//注意:终止条件是i<6,j<10,同时都不满足才会结束/跳出循环,否则一直会执行i++,j++;
4 作用域,优先级!变量提升!
//作用域,变量提升:
//**原则1:先在内部找,如果找不到,才可以向外查找;
//**原则2:优先级【变量且赋值 > 函数 > 传参数 > 变量提升】;
//尝试做以下8个题 练练脑
var bar = 1;
function aa(){
console.log(bar); //1 //内部找不到变量bar,找外部;
}
aa();
function bb(){
console.log(bar); //undefined //下句:变量var bar;会提升到最前面申明。找到了,所以不往外找了。
var bar =2; console.log(bar); //2
};
bb();
function fn(bar2){
console.log(bar2); //5
var bar2=1;
};
fn(5);
//不传参数,无后面那句,“报错”;【找不到变量】
//不传参数5,有后面那句,“undefined”;【变量提升】
//传参数+后面那句,输出“5”; 【传参优先级>变量提升】
function fn(bar3){
console.log(bar3); //bar3(){return "函数2";}
var bar3 = 1;
function bar3(){ return "函数1"; }
function bar3(){ return "函数2"; }
};
fn(6);
//函数>传参数>变量提升,且同优先级后者函数覆盖前者=输出函数
function fn(bar3){
var bar3 = 1; //变量且赋值 //变量赋值优先级最高!!
console.log(bar3); //输出 1
function bar3(){ return "函数1"; }
function bar3(){ return "函数2"; }
};
fn(6);
var foo = function(){
console.log(1);
}
function foo(){ console.log(2); }
foo();//答案:输出 1 //变量(用函数赋的值)优先级 > 函数;和代码前后位置无关
function c(){
var b = 1;
function a(){
console.log(b); //undefined //下一句变量提升
var b=2; console.log(b); //2
}
a();
console.log(b); //1 //外面拿不到里面的
};
c();
var name ="张三";
(function(){
if(typeof name == 'undefined'){
var name = "李四";
console.log("111"+ name)
}else{
console.log("222" + name)}
})();
//输出:111李四 //因为匿名函数内部有var变量提升,所以满足==undefined,不会往外找
5 浮点型数据
//因为js只有number数据类型,无浮点型
console.log(0.1+0.2); //0.30000000000000004
console.log(0.1+0.2==0.3); //false
//字符串类型的计算:+是连接,- * / 都是计算
var a='10';b=20;
console.log(a+b,a-b,a*b,a/b); //1020 -10 200 0.5
6 隐式转换:某些类型在被参与计算的时候会被转化为其他类型~
console.log(true+1); //2 //true隐式转化为number类型 1
console.log('name'+true);//nametrue //所有字符串类型不进行转化
console.log(undefined+1);//NaN //undefined隐式转化为number类型NaN
console.log(typeof null); //object