墙外必去的网站,wowway wordpress,在哪个网站做ppt模板赚钱,基于jsp的电子商务网站开发操作符及类型转换与控制流程语句 1.操作符1.1.算数运算符正常的数据运算进行数据运算时#xff0c;除外#xff0c;其他运算符可以自动将字符串数字隐形转成数字 1.2.一元运算符JavaScript中有8种常用的一元运算符 (正号)1.的第一种用法:进行数据相加2.放在数据的前面#… 操作符及类型转换与控制流程语句 1.操作符1.1.算数运算符正常的数据运算进行数据运算时除外其他运算符可以自动将字符串数字隐形转成数字 1.2.一元运算符JavaScript中有8种常用的一元运算符 (正号)1.的第一种用法:进行数据相加2.放在数据的前面就是取正数3.与字符串运算时就是字符串连接符4.可以将数字字符串或布尔类型等隐式转换成number类型 -(负号)1.正、负号可以对数字进行取正或取负其他运算符不能转换2.正、负号可以将字符串数字隐式转换成数字 !(取反)经常被用作条件判断时的取反操作类型判断等还可以用!将变量转换为Boolean类型 (递增)放在前面并进行赋值先累加后赋值放在后面并进行赋值先赋值后累加 --(递减)delete删除数组或对象中特定索引的值 typeof 扩展JavaScript隐式转换JavaScript中有两类数据类型:原始类型、对象类型原始类型(基础类型)对象类型 既然要隐式转换就应该有一套转换规则才能追踪最终转换成了什么通过ToPrimitive将值转换为原始值基本类型的转换加减乘除 有关的隐式转换引用类型的转换PreferredType转换策略如果PreferredType被标记为Number则会进行下面的操作流程来转换输入的值。如果PreferredType被标记为String则会进行下面的操作流程来转换输入的值。注意案例 1.3.赋值运算符 赋值运算符向变量赋值。 赋值运算符向变量添加值。- 赋值运算符从变量中减去一个值。* 赋值运算符相乘变量。/ 赋值运算符对变量相除。% 赋值运算符把余数赋值给变量。 1.4.比较运算符双等和三等的区别 注意!!和 大于和小于和 大于等于和小于等于非数值的情况下使用对于非数值进行比较时会先将其转换为数值然后再进行比较。 1.5.逻辑运算符 与(同真才真有假则假)||(有真才真同假则假)!(NOT) 1.6.三目运算符JavaScript中的三目运算符用作判断时基本语法为: expression ? sentence1 : sentence2当expression的值为真时执行sentence1否则执行 sentence2 2.类型转换2.1.* 字符串类型其他类型转换为StringtoString()函数 2.2.* 布尔类型其他数据类型转换为Boolean 2.3.* 数字类型其他数据类型转换为NumberNumber()包装器parseInt()函数parseFloat()函数 3.流程控制语句流程控制分支条件、循环分支语句3.1if...Else 语句条件语句if 语句if...else 语句if...else if...else 语句综合案列 3.2.switch 语句案例: default 关键词注意 循环语句不同类型的循环3.3.For 循环关键字 break 增强版for循环3.4.while 循环 语法3.5.do/while 循环3.6.递归使用递归实现阶乘 1.操作符
1.1.算数运算符
运算符描述例子结果加法var num 1 2;3-减法var num 4 - 3;1*乘法var num 4 * 3;12/除法var num 6 / 3;2%取余var num 7 % 3;1 正常的数据运算
var num1 8;
var num2 4;console.log(num1 num2); //12
console.log(num1 - num2); //4
console.log(num1 / num2); //2
console.log(num1 * num2); //32
console.log(num1 % num2); //0进行数据运算时除’外其他运算符可以自动将字符串数字隐形转成数字
var num1 8;
var num2 4;console.log(num1 - num2); //4
console.log(num1 / num2); //2
console.log(num1 * num2); //32
console.log(num1 % num2); //01.2.一元运算符
JavaScript中有8种常用的一元运算符
运算符描述将操作数转换成数字字符串的拼接-将操作数转换成数字同时变为负数!逻辑取反运算符递增–递减delete删除数组或对象中特定索引的值typeof操作数放到typeof的后面会返回当前操作数的类型对于数值类型可以准确返回对于引用类型Function会返回’function’其他都只会返回’object’voidvoid 运算符对任何值返回 undefined。 (正号)
1.的第一种用法:进行数据相加
var num1 3;
var num2 5;
var sum num1 num2; //82.放在数据的前面就是取正数
var num 6;
console.log(num); // 63.与字符串运算时就是字符串连接符
var a hello;
var b world;
console.log(a b); // helloworld4.可以将数字字符串或布尔类型等隐式转换成number类型
var a 123;
var b true;
console.log(a, b); // 123 1-(负号)
1.正、负号可以对数字进行取正或取负其他运算符不能转换
var num1 6;
var num2 -6;
console.log(-num1); //-6
console.log(num1); //6
console.log(-num2); //6
console.log(num2); //-62.正、负号可以将字符串数字隐式转换成数字
var num1 20;
var num2 -20;
console.log(-num1); //-20
console.log(num1, typeof num1); //20 number
console.log(-num2); //20
console.log(num2, typeof num2); //-20 number!(取反)
经常被用作条件判断时的取反操作类型判断等还可以用’!将变量转换为Boolean类型
var a;
if (!a) {}
console.log(!null); //true
console.log(!undefined); //true
console.log(!); //true
console.log(!100); //false
console.log(!abc); //false(递增)
通常用于循环语句动画操作等。
放在前面并进行赋值先累加后赋值
var num 0;
var a num;
console.log(a); // 1
console.log(num); // 1
//num先自加1再赋值给a放在后面并进行赋值先赋值后累加
var num 0;
var a num;
console.log(a); // 0
console.log(num); // 1
//先把num的值赋值给anum再自加1–(递减)
通常用于循环语句动画操作等。使用方法与类似。
delete
删除数组或对象中特定索引的值
var obj {name:zhangsan,age: 17
};
delete obj.name;
console.log(obj); // {age: 17}var arr [1,2,3,4,5];
delete arr[2];
console.log(arr); //[ 1, 2, 1 empty item, 4, 5 ]typeof
操作数放到typeof的后面会返回当前操作数的类型对于数值类型可以准确返回对于引用类型Function会返回’function’其他都只会返回’object’
var obj {name:zhangsan,age: 17
};
var arr [1,2,3,4,5];
console.log(typeof obj, typeof arr); //object object扩展JavaScript隐式转换 JavaScript中有两类数据类型:原始类型、对象类型
原始类型(基础类型)
Undefined、Null、S tring、Number、Boolean、Symboles6新推出的暂不考虑
对象类型
object 既然要隐式转换就应该有一套转换规则才能追踪最终转换成了什么
隐式转换中主要涉及到三种转换
1、将值转为原始值ToPrimitive()。
2、将值转为数字ToNumber()。
3、将值转为字符串ToString()。 通过ToPrimitive将值转换为原始值
js引擎内部的抽象操作ToPrimitive有着这样的签名
ToPrimitive(input, PreferredType?)
input是要转换的值PreferredType是可选参数仅可以是Number或String类型。 他只是一个转换标志转化后的结果并不一定是这个参数值的类型但是转换结果一定是一个原始值或者报错。
对于Date求原始值比较特殊PreferredType是String其他Object对象均为Number。 基本类型的转换
加减乘除
1.字符串加数字,数字就会转成字符串。数字加数字或字符串加字符串不需要转换。
在加法的过程中首先把加号左右两边进行了求原值ToPrimitive()操作然后如果有两个或多个原始值只要有一个是String类型就把两个或多个原始值都进行转化字符串toString()操作进行字符串拼接否则把两个或多个原始值都进行转化数字toNumber()操作进行数字相加。
var a 1 2 3;
console.log(a, typeof a); // 33 string
var b 1 2 3;
console.log(b, typeof b); // 6 number2.数字减字符串字符串转成数字。如果字符串不是纯数字就会转成NaN。字符串减数字也一样。两个字符串相减也先转成数字。
// -
10 - 20 //-10
10 - one //NaN
10 - 100a //NaN3.乘除大于小于跟减的转换也是一样。
// *
10*20 //200
10*20 //200
// /
20/10 //2
20/10 //2
20/one //NaN有关的隐式转换
1.undefined等于null
2.字符串和数字比较时字符串转数字
3.数字和布尔比较时布尔转数字
4.字符串和布尔比较时两者转数字
//
undefined null; //true
0 0; //true,字符串转数字
0 false; //true,布尔转数字
0 false; //true,两者转数字引用类型的转换 基本类型间的比较相对简单。引用类型和基本类型的比较就相对复杂一些先要把引用类型转成基本类型再按上述的方法比较。
PreferredType转换策略 如果PreferredType被标记为Number则会进行下面的操作流程来转换输入的值。
1、如果输入的值已经是一个原始值则直接返回它 2、否则如果输入的值是一个对象则调用该对象的valueOf()方法 如果valueOf()方法的返回值是一个原始值则返回这个原始值。 3、否则调用这个对象的toString()方法如果toString()方法返回的是一个原始值则返回这个原始值。 4、否则抛出TypeError异常。 如果PreferredType被标记为String则会进行下面的操作流程来转换输入的值。
1、如果输入的值已经是一个原始值则直接返回它 2、否则调用这个对象的toString()方法如果toString()方法返回的是一个原始值则返回这个原始值。 3、否则如果输入的值是一个对象则调用该对象的valueOf()方法 如果valueOf()方法的返回值是一个原始值则返回这个原始值。 4、否则抛出TypeError异常。
注意
PreferredType的值会按照这样的规则来自动设置
1、该对象为Date类型则PreferredType被设置为String
2、否则PreferredType被设置为Number
案例
[] [] // 进行ToPrimitive两个都是Array对象不是Date对象所以以Number为转换标准所以先调用valueOf()结果还是[ ]不是原始值所以继续调用toString()结果是“”(空字符串)原始值将“”返回。第二个[ ]过程是相同的返回“”。加号两边结果都是String类型所以进行字符串拼接结果是“”。
[] {} // [object Object]进行ToPrimitive依然是以Number为转换标准。 [ ]的结果是“”。 { }先调用valueOf()结果是{ }不是原始值所以继续调用toString()结果是“[object Object]”,是原始值将“[object Object]”返回。 加号两边结果都是String类型所以进行字符串拼接结果是“[object Object]”。 [] // 0[ ]就成了一元运算。[ ]的原值是”” 将””转化成Number结果是0。
{} {} // [object Object][object Object]在金丝雀版本的chrome浏览器和node中结果符合预期。 结果是”object Object”。 在普通版本的chrome浏览器中结果是NaN。 这是为什么呢原因是在node中会将以“{”开始“}”结束的语句外面包裹一层( )就变成了({ } { })结果就符合预期。而普通版本的chrome依然会解析成{};{}结果就变成了NaN
1.3.赋值运算符
运算符例子等同于x yx yx yx x y-x - yx x - y*x * yx x * y/x / yx x / y%x % yx x % y 赋值运算符向变量赋值。
var x 7;赋值运算符向变量添加值。
var x 7;
x 8; - 赋值运算符从变量中减去一个值。
var x 7;
x - 8; * 赋值运算符相乘变量。
var x 7;
x * 8; / 赋值运算符对变量相除。
var x 7;
x / 8; % 赋值运算符把余数赋值给变量。
var x 7;
x % 8; 1.4.比较运算符
比较运算符在逻辑语句中使用以判定变量或值是否相等。通常用于条件判断语句中。
比较运算符的优先级低于算术运算符高于赋值运算符运算结果一般都为boolean
运算符描述比较返回等于x 8falsex 5truex “5”true值相等并且类型相等x 5truex “5”false!不相等x ! 8true!值不相等或类型不相等x ! 5falsex ! “5”truex ! 8true大于x 8false小于x 8true大于或等于x 8false小于或等于x 8true 等同 的意思 两边值类型不同的时候要先进行类型转换为同一类型后再比较值是否相等。
// 常用于相同类型的值的比较
console.log(123 345); //false
console.log(123 345); //false
// 如果两个值类型不同也有可能相等需根据以下规则进行类型转换在比较
// 如果一个是null一个是undefined那么相等
console.log(null undefined); //true
// 如果一个是字符串一个是数值把字符串转换成数值之后再进行比较
console.log(123 123); //true
//如果是整数类型和boolean类型的数值进行比较1和true使用比较结果为true0和false使用比较结果也为true其它都为false可以理解记忆为使用比较整数时将1等同true将0等同false。
console.log(1 true); //true
console.log(0 false); //true恒等 的意思不做类型转换类型不同的结果一定不等。
// 如果类型不同就一定不相等
console.log(123 123); //false
// 如果两个都是数值并且是同一个值那么相等如果其中至少一个是NaN那么不相等。判断一个值是否是NaN只能使用isNaN() 来判断
console.log(123 123); //true
console.log(123 10 / a); //false
// 如果两个都是字符串每个位置的字符都一样那么相等否则不相等。
console.log(hello hello); //true
// 如果两个值都是true或是false那么相等
console.log(true true); //true
console.log(1 true); //false
// 如果两个值都是null或是undefined那么相等
console.log(null null); //true
console.log(null undefined); //false双等和三等的区别
双等表示只要值相等即可为真而三等则要求不仅值相等而且也要求类型相同。 建议尽量使用严格运算符 三等。因为不严谨可能会带来一些违反直觉的后果。
注意
1、对于string,number等基础类型双等和三等是有区别的
1不同类型间比较双等之比较“转化成同一类型后的值”看“值”是否相等如果类型不同其结果就是不等
2同类型比较直接进行“值”比较两者结果一样
2、对于Array,Object等高级类型双等和三等是没有区别的
进行“指针地址”比较
3、基础类型与高级类型双等和三等是有区别的
1对于将高级转化为基础类型进行“值”比较
2因为类型不同结果为false
!
! 和 用法类似 比较若类型不同先偿试转换类型再作值比较最后返回值比较结果 。
!
! 和 用法类似 只有在相同类型下,才会比较其值。
‘‘和’’ 大于和小于
var a 10;
var b 20;
console.log(a b); //false
console.log(a b); //true‘‘和’’ 大于等于和小于等于
var a 10;
var b 20;
console.log(a b); //false
console.log(a b); //true非数值的情况下使用’‘’‘’‘’’
对于非数值进行比较时会先将其转换为数值然后再进行比较。
// true转换为数值是1 false转换为数值是0
console.log(1 true); // 结果为false
console.log(1 true); // 结果为true
console.log(1 0); // 结果为true
console.log(1 null); // 结果为true
//任何值和NaN作比较结果都是false
console.log(1 hello); // 结果为false 任何值和NaN作比较结果都是false如果符号两侧都是字符串不会将其转换为数值进行比较而会分别比较字符串中字符的Unicode编码。 注意所以在比较两个字符串型的数字时一定要先转型。
console.log(134545353 5); // 不转型则返回false
console.log(134545353 5);// 这样结果才返回true而在比较字符编码时是一位一位进行比较的如果符号两侧第一位一样则比较下一位所以借此可以用来对英文进行排序而比较中文是没有意义的。
console.log(1 5); // 结果为true
console.log(11 5); // 结果也为true
console.log(be b); // 结果为true 先比较第一位b的字符编码是一样的再比较第二位由于be有e而b只有一位所以beb
console.log(be b); // 结果为false1.5.逻辑运算符
运算符描述例子and(x 10 y 1) 为 true||or(x5!not!(xy) 为 true 与(同真才真有假则假)
可应用于任意数值。如果有一个操作数不是布尔类型逻辑与就不一定返回boolean类型
如果第一个操作数是null,NaN,undefined,false,0,可被转换为false的值的时候返回该值
console.log(null world); //null当第一个表达式为真整个表达式的结果取决于第二个表达式返回第二个表达式
console.log(hello world); //world当第一个表达式为假整个表达式的结果就可以确定返回第一个表达式
console.log(false world); //false[null,NaN,undefined,false,0,“”]直接返回该操作数
console.log(123); // 空字符串
console.log(0null); //0
console.log(123345); //345
console.log(123undefined); //undefined||(有真才真同假则假)
如果两个或多个操作数都是null,NaN,undefined,false,0,可被转换为false的值的时候返回该值。
console.log(null || false); //false如果第一个操作数是null,NaN,undefined,false,0,“” 则返回第二个操作数。
console.log(null || hello); //hello如果第一个操作数是真直接返回第一个操作数。
console.log(123||345); //123当第一个表达式为真整个表达式的结果就可以确定返回第一个表达式
当第一个表达式为假整个表达式的结果取决于第二个表达式返回第二个表达式
有一个为true结果就为true
同时为false结果才为false
!(NOT)
经常被用作条件判断时的取反操作类型判断等还可以用’!将变量转换为Boolean类型
var a;
if (!a) {}
console.log(!null); //true
console.log(!undefined); //true
console.log(!); //true
console.log(!100); //false
console.log(!abc); //false1.6.三目运算符
JavaScript中的三目运算符用作判断时
基本语法为: expression ? sentence1 : sentence2
当expression的值为真时执行sentence1否则执行 sentence2
var age 19;
var result age 16 ? 成年人:未成年人;
// 当age大于16岁时条件为真执行sentence1其次反之2.类型转换
2.1.* 字符串类型
其他类型转换为String
toString()函数
除了nullundefined其他三种基本数据类型的变量均有一个toString()函数该函数可以获取该变量指定值的字符串表示。
var a true;
var b 123;
console.log(a.toString(), b.toString());// true 123
console.log(typeof a.toString(), typeof b.toString());//string string 如果变量为number类型默认情况下toString()是以十进制格式返回数值的字符串表示通过传递参数可以输入以二进制八进制十六进制乃至任意有效进制格式的字符串值
var num 10;
console.log(num.toString()); //10
console.log(num.toString(2)) //1010
console.log(num.toString(8)) //12
console.log(num.toString(16)) //a 任意其他数据与字符串相加都会转化为字符串
console.log(typeof (true )); //string2.2.* 布尔类型
其他数据类型转换为Boolean
Boolean()包装器
Boolean(hello) //true使用!!转换任意其他数据类型都可以转换为布尔类型。
!!hello //true2.3.* 数字类型
其他数据类型转换为Number
Number()包装器
如果转换的值是null,undefined,boolean,number
Number(true); //1
Number(false); //0
Number(null); //0
Number(undefined); //NaN
Number(10); //10 如果是数字值,原样输出如果转换的值是string
Number(123); //123 如果仅包含数值转换为对应的数值
Number(234.1); //234.1 解析为对应的小数
Number(12.1); //12.1 首位为符号位其余为为数值转换为对应的数值
Number(12.3); // NaN 符号位出现在其他位置解析为NaN
Number(0xa); //10 如果仅包含十六进制格式转为为对应的十进制的值
Number(010); //10【注意】不会当做八进制被解析结果为10。
Number(); // 0 空字符串被转换为0
Number(123ac); // NaN 包含其他字符 NaN
Number(12); //12parseInt()函数
如果转换的值是null,undefined,boolean均转换为NaN
如果转换的值是Number
parseInt(10); //10 如果是整数值原样输出 parseInt(10.3); //10 如果是小数舍去小数点一级后面的内容如果转换的值是string
parseInt(123); //123如果仅包含数值转换为对应的数值
parseInt(234.1); //234小数点后面的数值省略
parseInt(12.1); //12 首位为符号位其余为为数值转换为整数
parseInt(12.7); //1 符号位出现在其他位置保留符号位前面的数值
parseInt(0xa); //10 如果仅包含十六进制格式转为为对应的十进制的值
parseInt(010); //10 【注意】不会当做八进制被解析结果为10
parseInt(); //NaN空字符串被转换为NaN
parseInt(12.3); //1;如果首位为数值依次向后解析找到连续的数值直到遇到第一个非数值的将之前获取的数值转换为Number返回 parseInt(123ac); //123;parseFloat()函数
如果转换的值是null,undefined,boolean均转换为NaN
如果转换的值是Number
parseFloat(10); //10 如果是整数值原样输出 parseFloat(10.1); //10.1 如果是小数保留小数点但是如果是10.0结果为10如果转换的值是string
parseFloat(123); //123如果仅包含数值转换为对应的数值
parseFloat(234.1); //234.1保留小数点后面的数值
parseFloat(12.1); //12.1 首位为符号位其余为为数值转换为整数
parseFloat(12.6); //1符号位出现在其他位置保留符号位前的数值
parseFloat(0xa); //0 【注意】不会当做十六进制来解析。
parseFloat(010); //10 【注意】不会当做八进制被解析结果为10
parseFloat(); //NaN空字符串被转换为NaN
parseFloat(12.3); //1;如果首位为数值依次向后解析找到连续的数值直到遇到第一个非数值的将之前获取的数值转换为Number返回 parseFloat(123.3ac);//123.3;23 //23
null //0
undefined //NaN3.流程控制语句
流程控制分支条件、循环
分支语句
3.1if…Else 语句 条件语句用于基于不同的条件来执行不同的动作。 条件语句
通常在写代码时总是需要为不同的决定来执行不同的动作。可以在代码中使用条件语句来完成该任务。
在 JavaScript 中我们可使用以下条件语句
if 语句 - 只有当指定条件为 true 时使用该语句来执行代码if…else 语句 - 当条件为 true 时执行代码当条件为 false 时执行其他代码if…else if…else 语句- 使用该语句来选择多个代码块之一来执行switch 语句 - 使用该语句来选择多个代码块之一来执行
if 语句
只有当指定条件为 true 时该语句才会执行代码。
if (condition)
{当条件为 true 时执行的代码
}condition表示任意表达式该表达式求值的结果不一定是布尔类型如果不是布尔类型ECMAScript会调用Boolean() 转换函数将这个表达式结果转换为一个布尔类型 当该值为true时执行if代码块中的内容。
if…else 语句
使用 if…else 语句在条件为 true 时执行代码在条件为 false 时执行其他代码。
if (condition)
{当条件为 true 时执行的代码
}
else
{当条件不为 true 时执行的代码
}当condition为true时执行if代码块中的内容否则执行else代码块中的内容一般情况下如果代码块中代码只有一行可以省略大括号。
if…else if…else 语句
使用 if…else if…else 语句来选择多个代码块之一来执行。
if (condition1)
{statement1当条件 1 为 true 时执行的代码
}
else if (condition2)
{statement2当条件 2 为 true 时执行的代码
}
else
{statement3当条件 1 和 条件 2 都不为 true 时执行的代码
}多条件分支当condition1为true时执行statement1,否则当condition2为true时执行statement2当condition1,condition2都为false的时候执行statement3。
综合案列
function exchange(num) {if (num typeof num number) {//typeof numnumber 0num and num10if (num 0 num 10) {if (num 1) {result 壹;} else if (num 2) {result 贰;} else if (num 3) {result 叁;} else if (num 4) {result 肆;} else if (num 5) {result 伍;} else if (num 6) {result 陆;} else if (num 7) {result 柒;} else if (num 8) {result 捌;} else if (num 9) {result 玖;} else {result 拾;}} else if(num 10) {result 请输入不大于10的数字;} else{result 请输入不小于0的数字;}} else if (num 0) {result 零;} else {result 请输入数字;}console.log(result);
}
exchange(0);
exchange(-120);
exchange(100);
exchange(as);
exchange();3.2.switch 语句 switch 语句用于基于不同的条件来执行不同的动作。 使用 switch 语句来选择要执行的多个代码块之一。
switch(n)
{case 1:执行代码块 1break;case 2:执行代码块 2break;default:与 case 1 和 case 2 不同时执行的代码
}工作原理首先设置表达式 n通常是一个变量。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。
案例:
var dnew Date().getDay();
switch (d)
{ case 0:console.log(周日);break; case 1:console.log(周一);break; case 2:console.log(周二); break; case 3:console.log(周三); break; case 4:console.log(周四); break; case 5:console.log(周五);break; case 6:console.log(周六); break;
}default 关键词
请使用 default 关键词来规定匹配不存在时做的事情
var d new Date().getDay();
switch (d) {case 4:console.log(周四);break;case 5:console.log(周五);break;default:console.log(期待周末);
}注意
1. case代码块中break不能省略
2. default可以放到代码任意位置break不能省略最后位置可以省略break;
3. 变量与常量对比使用”“
建议
做等值比较的分支控制建议使用switch非等值的判断建议使用If
循环语句 循环可以将代码块执行指定的次数。 如果希望一遍又一遍地运行相同的代码并且每次的值都不同那么使用循环是很方便的。
我们可以这样输出数组的值
var arr [1,2,3,4,5]
for (var i0;iarr.length;i)
{ console.log(i)
}不同类型的循环
JavaScript 支持不同类型的循环
for - 循环代码块一定的次数for/in - 循环遍历对象的属性while - 当指定的条件为 true 时循环指定的代码块do/while - 同样当指定的条件为 true 时循环指定的代码块
3.3.For 循环
for 循环是您在希望创建循环时常会用到的工具。
下面是 for 循环的语法
for (*语句 1*; *语句 2*; *语句 3*)
{*被执行的代码块*
}
for (var i0; i5; i)
{console.log(i);
}从上面的例子中您可以看到
Statement 1 在循环开始之前设置变量 (var i0)。
Statement 2 定义循环运行的条件i 必须小于 5。
Statement 3 在每次代码块已被执行后增加一个值 (i)。
语句 1 代码块开始前执行
通常我们会使用语句 1 初始化循环中所用的变量 (var i0)。
语句 1 是可选的也就是说不使用语句 1 也可以。
您可以在语句 1 中初始化任意或者多个值。
语句 2 定义运行循环代码块的条件
通常语句 2 用于评估初始变量的条件。
语句 2 同样是可选的。
如果语句 2 返回 true则循环再次开始如果返回 false则循环将结束。
语句 3 在循环代码块已被执行之后执行
通常语句 3 会增加初始变量的值。
语句 3 也是可选的。
语句 3 有多种用法。增量可以是负数 (i–)或者更大 (ii15)。
语句 3 也可以省略比如当循环内部有相应的代码时。
// 1-100偶数和
var result 0;
for(var i0;i100;i){if(i%20){result i;}
}
console.log(result);// 冒泡排序
//1、比较相邻的两个元素如果前一个比后一个大则交换位置。
//2、比较完第一轮的时候最后一个元素是最大的元素。
//3、这时候最后一个元素是最大的所以最后一个元素就不需要参与比较大小。
function bubbleSort(arr) {var len arr.length;//外层控制循环多少趟for (var i 0; i len-1; i) {//内层控制每一趟的循环次数for (var j 0; j len - 1 - i; j) {// 相邻元素两两对比元素交换大的元素交换到后面if (arr[j] arr[j 1]) {var temp arr[j];arr[j] arr[j1];arr[j1] temp;}}}return arr;
}
//举个数组
var arr [20,18,27,19,35];
//使用函数
bubbleSort(arr)关键字 break
如果想在所有迭代前退出即可使用break。当执行break后会立即跳出循环体。
关键字 continue与break不同的是continue不会跳出循环。而是立即结束当前循环进入下一次循环。
for(var i0;8;i){console.log(i);if(i5){break;}
}增强版for循环
for…in用于遍历数组或者对象的属性
for(自定义变量名 in 数组/对象){
执行代码
}
“自定义变量名”用来指定是数组的元素索引也可以是对象的属性
//循环数组
var arr[10,aa,20,30,40];
for(var i0;iarr.length;i){console.log(i--arr[i]);
}
for(var key in arr){console.log(key--arr[key]);
}
//循环对象属性
var obj {name:briup,age:12,salary:10000
};
/*
两种方式访问属性
objectName.propertyName
或者
objectName[propertyName]
*/
console.log(obj.name);
console.log(obj[age]);
console.log(obj.salary);
for(var key in obj){console.log(key--obj[key]);
}3.4.while 循环 只要指定条件为 true循环就可以一直执行代码块。 while 循环会在指定条件为真时循环执行代码块。
语法
while (*条件*)
{*需要执行的代码*
}
while (i5)
{console.log(i);i;
}// 求1-100的和
var result 0;
var i 1;
while(i100){result i;i;
}
console.log(result);3.5.do/while 循环
do/while 循环是 while 循环的变体。该循环会在检查条件是否为真之前执行一次代码块然后如果条件为真的话就会重复这个循环。
do
{需要执行的代码
}
while (条件);下面的例子使用 do/while 循环。该循环至少会执行一次即使条件为 false 它也会执行一次因为代码块会在条件被测试前执行
do
{console.log(i);i;
}
while (i5);// 求1-100的和
var result 0;
var i 1;
do{result i;i;
} while(i100);
console.log(result);3.6.递归
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算大大地减少了程序的代码量。
使用递归实现阶乘
// 递归 通俗理解
// 函数自己调用自己 停不下来
// 需要有 跳出的条件
/*使用递归 求n的阶乘假设 写好了一个函数 factorial1 1 fc(1) 2 1*2 -factorial(1)*2 fc(2)3 1*2*3 -factorial(2)*3 fc(2)*34 1*2*3*4 -factorial(3)*4...n 1*2*3...*n -factorial(n-1)*n
*/
function factorial(n) {// 跳出条件if (n 1) {return 1;}return factorial(n - 1) * n;
}
var result factorial(4);
console.log(result);