一、循环
for、while、do while循环的区别:
- 当循环的次数确定时,使用for循环和while循环差别不大,但是当循环次数不确定时,while方法使用起来更加方便;
- 当条件为false时,for、while循环就会终止循环,无论条件为不为true,do while循环都至少执行一次;
break、continue的区别:
- break:终止循环,所在的循环体已结束;
- continue:跳出循环,所在的循环体还没结束;
1. for循环:
/**
* for循环的两种写法:
* 1.声明、条件判断都写在()中
* 2.将声明,条件拆分的写法
* ...
*/
//1.声明、条件判断都写在()中,i<10后终止循环
for (var i = 0; i < 10; i++) {
console.log(i); //依次打印0-9
}
//2.将声明,条件拆分的写法,
var i = 0;
for (; i < 10;) {
console.log(i); //依次打印0-9、9
i++;
}
2. while循环:
/**
* while循环的声明不能写在()中,
* ()中只能写一句条件判断
*/
var i = 0;
while(i < 10){
console.log(i);
i++; //依次打印0-9、9
}
3. do while循环:
/**
* 条件为false时,do while循环都至少执行一次
*/
//首次循环满足条件i<10的情况
var i = 0;
do{
console.log(i); //依次打印0-9、9
i++;
}while(i < 10);
//首次循环不满足条件i<0的情况,这种情况for循环、while循环会不进入循环
var i = 0;
do{
console.log(i); //虽然不满足条件0<0;但是还是会打印:0
i++;
}while(i < 0);
4. break:
/**
* break:终止循环,所在的循环体已结束
* 用于满足条件时终止循环
*/
for(var i = 1 ; i < 10 ; i++ ){
console.log(i); //1-5,当i=5时,满足条件i % 5 == 0,所以i>5之后的数字都不会再打印
//如果i能整除5则终止循环
if(i % 5 == 0){
break;
}
}
5. continue:
/**
* continue:跳出循环,所在的循环体还没结束
* 1.题目:1-10中,有多少个数不能整除5?
* 思路:1. 整除5;就是i % 5 = 0 ;
*/
var num = 0 ;
for(var i = 0 ; i < 10 ; i++ ){
//整除5的数跳过循环:5/10都会跳过循环,不进行统计
if(i % 5 == 0){
continue;
}
num ++ ;
console.log(num);
}
6. for循环demo:
6.1 题目:0+1+2+...+n < 100,n为多少,它们累加的和为多少?
/**
* 思路:0+1+2+...+n :累加:sum += n,然后判断sum < 100
*/
var sum = 0;
for (var i = 0; i < 100; i++) {
sum += i;
if (sum < 100) {
console.log("sum:", sum + ',' + "i:" + i); //sum: 91,i:13
}
}
6.2 题目:找出1-100中可以整除7或者个位是7的数字,一共有多少个?
/**
* 思路:整除7的数:n % 7 = 0 ; 个位是7的数 : n % 10 = 7
* %:取模,例如:17 % 10 = 17 / 10 = 1 余7 ; = 7
*/
var sum = 0;
for (var i = 1; i < 100; i++) {
if (i % 7 == 0 || i % 10 == 7) {
sum++;
console.log("sum:", sum); // 22
console.log("i:" + i); //7、14、17、21...
}
}
6.3 题目:打印0-100,要求:()里面只能出现一句语句;{}里面不能出现i++、i--
var i = 101;
for (; i--;) {
console.log(i); //100,99,98,97...
}
6.4 题目:求一个数的n次方
/**
* 求10的5次方:10*10*10*10*10=100000
*/
var sum = 1,
n = 10;
for (var i = 1; i <= 5; i++) {
sum *= n; //sum = 10, sum = 10*10 ,sum = 100*10...
console.log(sum) //100000
}
6.5 题目:求n的阶乘:1234...
/**
* 求5的阶乘
*/
var sum = 1,
n = 5;
for (var i = 1; i <= n; i++) {
sum *= i;
console.log(sum) // 1*2*3*4*5 = 120
}
6.6 题目:调换数字的顺序:将789以987的形式输出
/**
* 思路: 1.先得到9: var a = 789 % 10 = 9;
* 2.得到8: var b = (789- a) % 100 / 10 = 8;
* 3.得到7: var c = (789 - a - b *10) /100 = 7
*/
var sum = 789,
a = sum % 10, //9
b = (sum - a) % 100 / 10, //8
c = (sum - a - b * 10) / 100; //7
console.log("" + a + b + c) //987-->前面+"",可以把三个数字变成字符串拼接而不是数字相加
6.7 题目: 打印100以内的质数,并统计一共有多少个
/**
* 思路:1.最小的质数是2,所以循环从2开始;
* 2.质数:只能被1或本身整除的自然数,所以统计完全商只有2个的自然数
*
*/
var count = 0, //统计每个自然数完全商(a/b完全除得尽)的个数
sum = 0; //统计质数的个数
for (var i = 2; i < 100; i++) {
for (var j = 1; j <= i; j++) {
if (i % j == 0) {
count++;
}
}
//判断自然数是否只有两个完全商,这种是质数
if (count == 2) {
sum++;
console.log("i", i); //2、3、5、7...
console.log("sum", sum); //25
}
count = 0; //统计完一个数是否为质数后,清0,重新统计下一个,
}
6.8 题目: 算出斐波那契数列的第n位:1 1 2 3 5 8 13 21 ...
/**
* 规律:第1/2位都是1,第3位开始,是它的前两位相加的和,3->2 4->3 5->5...以此类推
* 算出斐波那契数列的第n位:1 1 2 3 5 8 13 21 ...
* n1 n2 n3
* n1 n2 n3
* n1 n2 n3
*/
var n = parseInt(window.prompt("请输入第几位"));
if (n <= 0) {
console.log("输入错误");
} else {
if (n <= 2) {
//第1/2位都是1
console.log(1);
} else {
var n1 = 1,
n2 = 1,
n3;
for (var i = 2; i < n; i++) {
n3 = n1 + n2;
n1 = n2;
n2 = n3;
}
console.log(n3);
}
}
二、引用值
引用类型:Object、Function、Array、Date、RegExp
三、typeof操作符
- typeof:操作符返回一个字符串,表示未经计算的操作数的类型。可用于判断一个变量的数据类型。 类型 | 结果->typeof(类型) | | ---------- | -------------- | | undefined | undefined | | Number | function | | Object | function | | Function | function | | Array | function | | null | object | | [ ] | object | | { } | object | | "" | string | | NaN | number | | false/true | boolean
四、显式及隐式类型转换
1. 显式类型转换:
1.1 Number()
| 类型 | 结果->Number(类型) |
|---|---|
| true | 1 |
| false | 0 |
| null | 0 |
| [ ] | 0 |
| "" | 0 |
| { } | NaN |
| undefined | NaN |
字符串:
- 如果字符串包含数值字符,则转换为一个十进制数值。
- 如果字符串包含有效的浮点值格式,则会转换为相应的浮点值。
- 如果是空字符串,则返回0。
- 如果字符串包含除上述情况之外的其他字符,则返回NaN。
//number
console.log(Number('123')); // 123
console.log(Number('12.3')); // 12.3
//NaN
console.log(Number('1s')); // NaN
console.log(Number(undefined)); // NaN
console.log(Number({})); // NaN
console.log(Number(true)); // 1
//0
console.log(Number(false)); // 0
console.log(Number(null)); // 0
console.log(Number("")); // 0
console.log(Number([])); // 0
1.2 parseInt()
parseInt(string, radix)
- radix 参数用于指定使用哪种数字系统,例如基数为 16(十六进制)表示字符串中的数字应从十六进制数解析为十进制数。
- 将字符串转换为整数;
- 字符串最前面的空格会被忽略,从第一个非空格字符开始转换;
- 如果第一个字符不是数值字符、加号或减号,parseInt()立即返回NaN,(空字符串返回NaN);
- 如果第一个字符是数值字符、加号或减号,则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符。
//1.将字符串转换为整数
parseInt("123");
//2.字符串最前面的空格会被忽略,从第一个非空格字符开始转换
parseInt(" 0"); //0
//3.如果第一个字符不是数值字符、加号或减号,parseInt()立即返回NaN,(空字符串返回NaN);
parseInt("*0"); //NaN
parseInt(""); //NaN
parseInt(null); //NaN
parseInt("+0"); //0
parseInt("-0"); //0
/**
* 4.如果第一个字符是数值字符、加号或减号,
* 则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符。
*/
parseInt("123str"); //123
parseInt("123.63"); //123 -> 小数点后的数值舍去
/**
* 5. parseInt(string, radix): radix 参数用于指定使用哪种数字系统,10,16...
* 10进制:0-9
* 16进制:0 1 2 3 4 5 6 7 8 9 a b c d e f
*/
//以16进制为基底
parseInt("a",16); //10 a-->10
parseInt("b",16); //11 b-->11
parseInt("c",16); //12 c-->12
parseInt("d",16); //13 d-->13
parseInt("e",16); //14 e-->14
parseInt("f",16); //15 f-->15
1.3 parseFloat()
- 将一个字符串转换为浮点数时,只解析十进制值
- 从位置0开始检测每个字符,解析到字符串末尾或者解析到一个无效的浮点数值字符为止。
- 第一次出现的小数点是有效的,再次出现小数点就无效了,小数点后面的数值会被舍去。
- 它始终忽略字符串开头的零。
- 如果字符串表示整数,则返回整数。
//1.它始终忽略字符串开头的零
parseFloat("-05"); //-5
parseFloat("000005"); //5
//2.第一次出现的小数点是有效的,再次出现小数点就无效了,小数点后面的数值会被舍去。
parseFloat("05.05.05"); //5.05
//3.从位置0开始检测每个字符,解析到字符串末尾或者解析到一个无效的浮点数值字符为止
parseFloat("5.26tr6"); //5.26
parseFloat("5.2*5"); //5.2
//保留2位小数-> 四舍五入
parseFloat(5.688).toFixed(2); //5.69
1.4 toString()
- null、undefined没有toString()方法
([1,2]).toString(); //"1,2"
(5).toString(); //"5"
1.5 Boolean()
- null、undefined、0、''、 NaN、false都为假;
- 除了以上6个,其他的都为真;
//false
Boolean(null);
Boolean(undefined);
Boolean(0);
Boolean("");
Boolean(NaN);
Boolean(false);
//true
Boolean(1);
2. 隐式类型转换
2.1 + - * / ++ -- % ,如果包含这些操作符,会转换成Number类型;
//1. + ,如果表达式中包含字符串,+就是连接符;如果表达式中只包含number类型,+就是进行加法运算
var a = "20" + 5; // 205
var b = 5 + 6; //11
5 % "4" = 1;
5 / "4" = 1.25;
2.2 比较运算符
- undefined、null 不等于、大于、小于0
- null == undefined
- null !== undefined
- true == 1 ; false ==0;
- == 0; //false
- NaN == NaN; //false, NaN不与任何东西相等,包括自身
null == null; //true
true > 0 ; //true, true == 1
2.3 isNaN(value)
- isNaN() 函数用于检查其参数是否是非数字值。
- 参数如果不能被Number()转换为number类型则返回true,即为非数字值。
- 如果参数值为 NaN 或字符串、对象、undefined等非数字值则返回 true, 否则返回 false。 参数 | 结果 --> isNaN(value) | | --------- | ------------------------------- | | NaN | true -->Number(NaN) = NaN | | undefined | true -->Number(undefined) = NaN | | Object | true -->Number(Object) = NaN | | Array | true -->Number(Array) = NaN | | | | | [ ] | false -->Number([ ]) = 0 | | true | false -->Number(true) = 1 | | false | false -->Number(false ) = 0 | | "" | false -->Number("") = 0