一、for循环
for循环的基本认知
// 循环for(var i = 0; i < 5; i++){console.log(i);}// 语法for(变量声明, 条件判断, 步长累计){// 执行语句}// 步骤// 1. 变量声明 var i = 0// 2. 条件判断 if(i < 5){执行语句}// 3. 步长累计 i++// 2. if(i < 5){条件不满足,停止循环}// 3. 步长累计 i++
for循环的变化
// 循环for(var i = 0; i < 5; i++){console.log(i);}// for循环的变化var i = 0;for(; i < 5; ){console.log(i);i++;}
while循环
// while循环var i = 0;while(i < 10){console.log(i);i++;}
不用break和return如何结束循环
// 不用条件如何结束循环,不能用return,不能用breakvar i = 1;for(; i; ){console.log(i);i++;if(i == 11){i = 0;}}
1.2、break终止整个循环
var i = 1;for( ; i; ){console.log(i);i++;if(i == 11){break;}}
1.3、continue跳过本轮循环继续下一轮循环
100以内的数,跳过可以被7整除或者是个位数是7的数
// continue结束本轮循环,进入下一轮循环// 100以内,跳过可以被7整除或者是个位数是7的数for(var i = 0; i < 100; i++){if(i % 7 == 0 || i % 10 == 7){continue;}console.log(i);}
1.4、for循环练习题
从0开始做加法,加到什么时候总和小于100的
// 从0开始做加法,加到什么时候总和小于100的var sum = 0;for(var i = 0; i < 100; i++){sum += i;if(sum >= 100){break;}console.log(i, sum);}
打印0~9的和
// 打印0~9的和var sum = 0;for(var i = 0; i < 10; i++){sum +=i;}console.log(sum);
打印100以内可以被4或者是5或者是6整除的数
// 打印100以内可以被4或者是5或者是6整除的数for(var i = 0; i < 100; i++){if(i % 4 == 0 || i % 5 == 0 || i % 6 ==0 ){console.log(i);}}
打印0~100的数,()里面只能有一句,不能写比较;{}里不能出现i++或者是i—
for循环中,当条件不成立时,整个for循环就会自动结束
// 打印0~100的数,()里面只能有一句,不能写比较;{}里不能出现i++或者是i--var i = 101;for(; i--; ){console.log(i);}
二、do while循环
不管条件是否成立,它都要先执行一次
// do while循环:不管条件是否成立,它都要先执行一次var i = 0;do{console.log('我要开始循环了哦');i++;}while(false);
三、练习题
10的N次方
// 10的N次方var n = 5;var num = 1;for(var i = 0; i <= n; i++){num *= 10;}console.log(num);
n的阶乘
var n = 5;var num = 1;for(var i = 1; i <= n; i++){num *= i;}console.log(num);
把一个三位的数倒过来
// 把一个三位的数倒过来var num = 789;var a = num % 10;var b = (num - a) / 10 % 10;var c = (num - a - b * 10) / 100;console.log('' + a + b + c);
打印三个数中的最大数
// 打印三个数中的最大数var a = 11;var b = 99;var c = 36;if(a > b){if(a > c){console.log(a);}else{console.log(c);}}else{if(b > c){console.log(b);}else{console.log(c);}}
打印100以内的质数:仅仅可以被1和自己整除的数
注意:1既不是质数,也不是合数
// 打印100以内的质数:仅仅可以被1和自己整除的数// 注意1既不是质数,也不是合数var count = 0;for(var i = 2; i < 100; i++){for(var j = 1; j <= i; j++){if(i % j == 0){count++;}}if(count == 2){console.log(i);}count = 0;}
四、初始引用值
4.1、Array数组
- 数组的索引是从0开始,逐级递增的
- 数组有一个length属性,用来存储数组的长度,arr.length
- 获取数组的第一项:arr[0]
或者数组的最后一项:arr[arr.length-1]
var arr = [1, 2, 3, 4, null, 5];// 取值console.log(arr[0]);// 赋值arr[4] = undefined;console.log(arr); //[1, 2, 3, 4, undefined, 5]// 循环打印数组中的每一项for(var i = 0; i < arr.length; i++){console.log(arr[i]);}
4.2、Object普通对象
普通对象是由{}包裹起来,由一组一组的属性名和属性值组成的「键值对」
- 每一组键值对的末尾用逗号分隔
当访问对象的属性,这个属性不存在时,获取到的值是undefined,而不会报错
// Object对象var person = {name: 'liangyu',age: 8,height: '180cm',weight: '65kg',job: 'WEB Front-end development'}// 取值console.log(person.age);// 赋值person.age = 18;console.log(person);
五、typeof的检测机制
typeof检测的结果首先是一个字符串,字符串中包含着对应的数据类型
- typeof(null) 的返回结果是object
- typeof函数,返回的结果是’function’
- 除此之外,typeof无法具体细分出是哪一种对象
- 有两个及两个以上的typeof,返回的结果一定是’string’
typeof一个未被声明的变量,返回的结果是undefined,而不会报错
console.log(typeof(1));console.log(typeof('1'));console.log(typeof(true));console.log(typeof({}));console.log(typeof([]));console.log(typeof(function(){}));console.log(typeof(null));console.log(typeof(undefined));console.log(typeof(1 - 1));console.log(typeof(1 - '1'));console.log(typeof('1' - '1'));// 面试题console.log(typeof(a));
六、显式类型转换和隐式类型转换
6.1、显式类型转换Number
只要遇到非有效数字字符结果就为NaN
- null转换为数字是0
- undefined转换为数字是NaN
true转换数字是1,false转换为数字是0
// 显式类型转换Numberconsole.log(Number('123'));console.log(Number(true));console.log(Number('true'));console.log(Number(null));console.log(Number(undefined));console.log(Number('a'));console.log(Number('1a'));console.log(Number('3.14'));
6.2、显式类型转换parseInt
// 显式类型转换parseIntconsole.log(parseInt('123'));console.log(parseInt(true));console.log(parseInt(false));console.log(parseInt(null));console.log(parseInt(undefined));console.log(parseInt(NaN));console.log(parseInt('3.14'))console.log(parseInt('3.99'));console.log(parseInt('abc123'));console.log(parseInt('width: 12px'));console.log(parseInt('12px'));// parseInt(value, radix); radix的取值范围是0~36var a = 10;console.log(parseInt(a, 16));
6.3、显式类型转换parseFloat
// 显式类型转换parseFloatconsole.log(parseFloat('3.14'));console.log(parseFloat('3'));
6.4、toFixed保留小数点后几位
toFixed保留小数点后面几位,存在着四舍五入的情况
// toFixed保留小数点后面几位,存在着四舍五入的情况var num = parseFloat('3.1465926');console.log(num.toFixed(2));
6.5、显式类型转换String和value.toString
null和undefined是没有toString这个方法的
// 显式类型转换String和toString// 注意:null和undefined是没有toString这个方法的console.log(String(123));console.log(typeof(String(123)));console.log(typeof(123 + ''));// null和undefined是没有toString这个方法的console.log(null.toString);console.log(undefined.toString)
6.6、显式类型转换Boolean
false: 只有0、NaN、null、undefined、’’ 转换为布尔值是false,其余情况都为true
字符串也有length属性,存储的是字符串的长度 ```javascript // 显式类型转换Boolean // false: 只有0、NaN、null、undefined、’’ 转换为布尔值是false,其余情况都为true console.log(Boolean(true)); console.log(Boolean(null));
// 字符串也有length属性,存储的是字符串的长度 var str = ‘1234’; console.log(str.length);
<a name="FnRCz"></a>## 6.7、隐式类型转换「++、--、*、/、%」- ++、--、*、/、%- >、<、>=、<=- +、-- 以上几种情况,遇到字符串都需要把字符串转换为number```javascript// 隐式类型转换// ++, --, *, /, %// >, <, >=, <=// 正+, 负-// 以上几种情况,都需要把字符串转换为数字var a = '123';a++;console.log(a);// 字符串拼接var b = 'b' + 1;console.log(b);var c = '3' * 2;console.log(c);// 正+ 负-var num = '123';console.log(+num);console.log(typeof(+num));console.log(-num);console.log(typeof(-num));var d1 = '1' > '2';var d2 = 1 == '1';var d3 = 1 != '2';var d4 = 1 === '1';var d5 = NaN == NaN;console.log(d1, d2, d3, d4, d5);var a1 = 2 > 1 > 3;var a2 = 2 > 1 == 1;console.log(a1, a2);
6.8、null == undefined除此之外它们和任何值都不相等
// null == undefined,除此之外它们和任何值都不相等// null === undefined, 这个是不成立的var a1 = undefined > 0;var a2 = null > 0;var a3 = undefined < 0;var a4 = null < 0;var a5 = undefined == 0;var a6 = null == 0;var a7 = null == undefined;var a8 = null === undefined;console.log(a1, a2, a3, a4, a5, a6, a7, a8);
6.9、isNaN检测一个值是否为非有效数字
isNaN检测一个值是否为NaN,存在隐式类型转换
// isNaN检测一个值是否为NaN,存在隐式类型转换console.log(isNaN(123));console.log(isNaN('123'));console.log(isNaN('a'));console.log(isNaN(null));console.log(isNaN(undefined));console.log(isNaN(true));
七、斐波拉契数列
斐波拉契数列:也叫黄金分割数列,兔子数列
// 斐波拉契数列// for循环算出第n位// 1 1 2 3 5 8 13 21// n1 n2 n3// n1 n2 n3// n1 n2 n3var n = parseInt(window.prompt('请输入你想要的位数'));if(n <= 0){console.log(0);}else{if(n <= 2){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);}}
