循环
1. for 循环
- for(;条件判断(返回的是bool值);条件满足后执行的语句){执行语句;}
- 终止循环的方式
- break;
- return;
- 让判断条件为false
跳出当前循环
- continue ```javascript for(var i = 0;i < 10;i++){ console.log(i); } //等价于 var i =0; for(;i<10;){ console.log(i); i++; } //等价于 var i = 0; while(i<10){ console.log(i); i++; } //案例1 for(var i =0;i<10;i++){ if(i>5){ break;//方式1 return;//方式2
} } console.log(sum); //案例3 可以被4,5,6 整除的数 for (var i = 0; i < 100; i++) { if (i % 4 == 0 || i % 5 == 0 || i % 6 == 0) { console.log(i); continue } } //案例四 打印0-100 以内的数字;()不能有判断{}不能有++ — var i =100; for(;i—;){ console.log(i) } ```
2.while 循环
//1循环
while(条件){
//do sth
}
//2 do while 循环
do{
//执行语句
}while(条件)
/**缺点不管条件满足与否。至少都会执行一遍do里面的语句*/
for循环案例
案例1
描述:从0 开始加到100;什么时候加到总和小于100;i的值
// 从0开始加到100
var sum = 0;//总和初始化为0
for(var i=0;i<100;i++){
sum += i;
if(sum>=100){
break;
}
console.log(sum,i);
}
案例2
描述:100以内可以被7整除或者个位数是7的数
//案例2 100以内可以被7整除或者个位数是7的数
for (var i = 0; i < 100; i++) {
if (i % 7 == 0 || i % 10 == 7) {
console.log(i);//输出 0,7,14,17....
continue
}
}
案例3
打印100以内的质数(只能被1和它本身整除)
var count = 0;
for (var i = 1; i < 100; i++) {
for (var j = 1; j <= i; j++) {
if (i % j == 0) {
count++;
}
}
if (count == 2) {
console.log(i);//这个是质数 输出2,3,5,7,11 .....
}
if(count > 2){
console.log(i)//这个是和数 4,6,8,9,10
}
count = 0;
}
案例4
打印0-100 以内的数字;()不能有判断{}不能有++ —
var i =100;
for(;i--;){
console.log(i)
}
案例5
描述:输出阶乘 n 代表n阶
var n = 6,//6阶
mul = 1;//积
for (var i = 1; i <= n; i++) {
mul *= i;
}
console.log(mul)
案例6
描述 10 的N次方
var n = 6,//6次方
mul = 1;//积
for (var i = 1; i <= n; i++) {
mul *= 10;
}
console.log(mul)
引用值
Array、Object、Function、Date、RegExp
Array
var arr = [1, 2, 3];
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
Object
var person = {
name: 'xxx',
age: 20,
}
person.name='www'
typeof
返回值是string
console.log(typeof (1)); //number
console.log(typeof ('1'));//string
console.log(typeof (function () { }));//function
console.log(typeof ({}));//object
console.log(typeof (new Date()));//object
console.log(typeof (undefined));//undefined
console.log(typeof (null));//object
console.log(typeof ([]));//object
显示转换
Number
字符串都是数字的会转成Number,其他显示转换都是NaN;
Number()参数是数组的时候- 数组.valueOf
- 数组.valueOf().toString();
Number('123');//123 number
Number('1234Ah');//NaN 字符串 数字字符串可以转成Number 别的都是NaN
Number(null);//0
Number(undefined);//NaN
Number(NaN);//NaN
Number(false);//0
Number(new Date());//当前时间戳
Number([])//0
Number([1])//1
Number([1,2,3])//NaN
Number({})//NaN
Number(function(){})//NaN
parseInt
parseInt(s,radix)//radix(2-36) 表示进制;
parseInt(10,16);//返回的是10 在 16进制中表示16;
36进制表示0123456789abcdefghijklmnopqrstuvwxyzparseFloat:
转为小数
- toFixed(n)//保留n位小数。四舍五入
parseInt('abcn', 36);//转成36进制的数;
parseInt('abcn');//NaN 默认转换10进制的数
parseInt(true);//1
parseInt(false);//0
parseInt(undefined);//NaN
parseInt(null,36)//1112745
parseInt(null)//NaN????????
parseInt(NaN)//NaN
String
String(1);//'1'
String(undefined);//'undefined'
String(null);//'null'
String(NaN);//'NaN'
String(false);//'false'
Boolean
undefined,null,false,0,NaN 是false ```javascript Boolean(null)//false Boolean(undefined);//false Boolean(NaN);//false, Boolean(0);//false Boolean(false);//false
<a name="xSUj3"></a>
## 隐式类型转换
- 转成string 类型的 +(字符串连接符)
- +有一边是字符串的时候 是**字符串连接符 没有字符串的时候是运算符。引用类型 会调用.valueOf 方法再调用toString()。其他原始值会调用Number()方法转成数字再做加法。**
- 乘除取余 都会隐式转成Number
- 自增自减,算数运算符 关系运算符 字符串类型转成Number类型
```javascript
var a= '123';
a++;
console.log(a)//124
var a='a'+1;
console.log(a);//a1
var a = '3'*2;// */% d6
var a= 1>2>3;//false
var a = 2>1===1; //false 全等回比较类型
var a = 2>1==1; //true 只比较值不比类型
var a = undefined>0;//false
var a = undefined == 0;//false
console.log(1+'1');//'11'
console.log(1+'true');//'1true'
console.log(1+null);//1
console.log(1+undefined);//NaN
- 比较运算
- 两边有一边是字符串的时候后,会将字符串转成(Numer())数字
- 两边都是字符串的时候,则从左到右依次比较字符串对应的UNICode编码
- 对应字符不相等这直接出结果
- 对应字符相等 则进行下一位比较
- undefined 和 null 比较
- undefined==undefined//true
- null == null //true
- undefined ==null //true
- 复杂数据类型。在隐式转换时会先转成String,然后在转成Number运算
- 先使用valueOf方法获取其原始值,如果原始值不是number类型,则使用toString()方法转成string
- 再将string转成number计算
- 先将数组转成string 再和右边的字符串比较
- ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12831495/1615966451401-a56e848d-9f1d-4df9-9e91-d118effb9adf.png#crop=0&crop=0&crop=1&crop=1&height=142&id=eR0xk&margin=%5Bobject%20Object%5D&name=image.png&originHeight=142&originWidth=211&originalType=binary&ratio=1&rotation=0&showTitle=false&size=4816&status=done&style=none&title=&width=211)
作业
// 兔子数列
/***
* 思路
* 1:输入1,或者2 返回的都是1,因为数列的第一位和第二位永远都是1
* 2:兔子数列的第n位等于 第n-1位和n-2位的和。此时n>=3;
*/
function rabbitSequence(num) {
if(typeof num == 'number'&&!num&&num>0){
return '请输入正确的数字'
}
if (num == 1 || num==2) {
return 1;
}
var arr = [1, 1];
// arr[num - 1] = arr[num - 2] + arr[num - 3];
for (var i = 3; i <=num; i++) {
arr[i - 1] = arr[i - 2] + arr[i - 3];
}
return arr[num-1]
}
var num = rabbitSequence(3);
console.log(num);
/* **************************************** */
//兔子数列 或者黄金分割数列
function rabbitSequenceTwo(n) {
var n1 = 1,//第一位
n2 = 1,//第二位
n3;//第n位
if (n == 1 || n == 2) {
return 1;
}
for (var i = 2; i < n; i++) {
n3 = n1 + n2;//第n位等于第n-1和第n-2位的和.
n1 = n2;//将第二位赋值给第一位
n2 = n3;//将第三位赋值给第二位
}
return n3;
}
console.log(rabbitSequenceTwo(5));