学习时间 | 完成时间 ✅ | 重难点 | 疑问/遗漏 |
---|---|---|---|
复习时间 | |||
循环
let i=0;
for(;i<10;) {
i++
} //类似while循环
while(i<10){i++}
for(;i;){
i++;
if(i==11) {
i=0; //等价于 break;
}
}
//从0开始做加法,加到什么时候总和是小于100
var sum=0;
for(var i=0;i<100;i++) {
sum+=i;
if(sum>=100) {
break;
}
}
continue 跳过本次循环,for循环的中间语句属于条件语句,为false就停止循环了
//打印0-100的数
//()只能有一句,不能写比较
// {} 不能出现 i++,i--
var i=100;
for(;i--;) {
congsole.log(i)
}
//do while 无论条件正确与否,都会执行一次
do{
//先执行do,再判断
}while(0)
//n的阶乘
var n=5;
var num=1;
for(var i=1;i<=5;i++) {
num*=i;
}
//已知789打印出来‘987’
var num=789;
var a=num%10;
var b=(num-a)%100/10;
var c=(num-a-b*10)/100;
console.log(''+a+b+c)
//打印100以内的质数
//仅仅能被1和自己整除的数
var c=0;
for(var i=2;i<100;i++) {
for(var j=1;j<=i;j++) {
if(i%j==0) {
c++
}
}
if(c==2) {
console.log(i)
}
}
引用值初识
array object function date RegExp
显示及隐式类型转换
typeof(null) //object 这是个历史的bug
typeof(NaN) //number
typeof(undefined) //‘undefined’ 字符串
typeof(1-'1') //number
typeof(a) //字符串 ’undefined‘
typeof(typeof(a)) //string 任何typeof的值,再typeof结果都是string
let和const定义的变量会存在‘暂时性死区’即变量在未定义之前使用会报错,这使得typeof也不是百分百安全
//显式类型转换
Number('true') //NaN 里面是字母都会转化为NaN
Number(true) //1
Number(null/false) //0
Number(undefined) //NaN 非数
Number('123') //123
parseInt('123') //123
parseInt(true/false/null/undefined) //NaN
//隐式类型转换
1.123.toFixed(2) //1.12
undefined == 0 undefined>0 undefined<0 //false > < = 都为false
null == 0 null>0 null<0 //false
null==undefined //true
let a='122'
typeof(+a) //number
isNaN() 函数用于检查其参数是否是非数字值
isNaN('123') //false
isNaN('a') //true
isNaN(null) //false 看看Number(null)
isNaN(undefined) //true
-true==-1 +undefined 为NaN NaN+"" 为‘NaN’ 字符串NaN
typeof(a)&&(-true)+(+undefined)+'' 为true
!!' '+!!''-!!false 为1 1+0-0=1
斐波那契数列
方法一:
function* fibonacci() {
let [prev, curr] = [0, 1];
for (;;) {
yield curr;
[prev, curr] = [curr, prev + curr];
}
}
for (let n of fibonacci()) {
if (n > 1000) break;
console.log(n);
}
方法二:
function fb(n) {
if(n<=0) {
return 0;
}
if(n<=2) {
return 1;
}
return fb(n-1)+fb(n-2)
}
方法三:
if(0<n<=2) {
return 1
}else{
var n1=1,
n2=1,
n3;
for(var i=2;i<n;i++) {
n3=n1+n2;
n1=n2;
n2=n3;
}
}
n的介乘
function fact(n) {
if(n===1) {
return 1;
}
return n*fact(n-1)
}
容易忽视的问题
function fn() {
var a1=a2='2';
}
在函数中这样定义a2会导致内存泄露
下面两个打印都是undefined
因为let不会在全局声明时,创建window对象属性,在箭头函数中没有自己的this,所以都是undefined