版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/funkstill/article/details/84801300
目录
语句
if语句
if (i > 25) {
alert("Greater than 25.");
} else if (i < 0) {
alert("Less than 0.");
} else {
alert("Between 0 and 25, inclusive.");
}
do-while语句
var i = 0;
do {
i += 2;
} while (i < 10);
alert(i);
//这种后测试循环语句最常用于循环体中的代码至少要被执行一次的情形
while语句
var i = 0;
while (i < 10) {
i += 2;
}
for语句
var count = 10;
for (var i = 0; i < count; i++){
alert(i);
}
/*等价while
* var count = 10;
* var i = 0;
* while (i < count){
* alert(i);
* i++;
* }
/
由于 ECMAScript 中不存在块级作用域,因此在循环内部定义的变量也可以在外部访问到。
var count = 10;
for (var i = 0; i < count; i++){
alert(i);
}
alert(i); //10
for-in语句
//一种精准的迭代语句,可以用来枚举对象的属性。
//建议在使用 for-in 循环之前,先检测确认该对象的值不是 null 或 undefined。
for (var propName in window) {
document.write(propName);
}
label语句
//label: statement
start: for (var i=0; i < count; i++) {
alert(i);
}
//定义的 start 标签可以在将来由 break 或 continue 语句引用。加标签的语句一般都
//要与 for 语句等循环语句配合使用
break和continue语句
//break:立即退出循环,强制继续执行循环后面的语句。
var num = 0;
for (var i=1; i < 10; i++) {
if (i % 5 == 0) {
break;
}
num++;
}
alert(num); //4
//continue:立即退出循环,但退出循环后会从循环的顶部继续执行
var num = 0;
for (var i=1; i < 10; i++) {
if (i % 5 == 0) {
continue;//相当于空跑一趟循环
}
num++;
}
alert(num); //8
//break加lable
var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
break outermost;
}
num++;
}
}
alert(num); //55=10+10+10+10+5
//continue加lable
var num = 0;
outermost:
for (var i=0; i < 10; i++) {
for (var j=0; j < 10; j++) {
if (i == 5 && j == 5) {
continue outermost;
}
num++;
}
}
alert(num); //95=10+10+10+10+10+5+10+10+10+10
with语句
//将代码的作用域设置到一个特定的对象中。为了简化多次编写同一个对象的工作
//with (expression) statement;
var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;
//等价于下面
with(location){
var qs = search.substring(1);
var hostName = hostname;
var url = href;
}
严格模式下不允许使用 with 语句,否则将视为语法错误。由于大量使用 with 语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用 with 语句。
switch语句
/*
*switch (expression) {
* case value: statement
* break;
* case value: statement
* break;
* case value: statement
* break;
* case value: statement
* break;
* default: statement
*}
*/
switch (i) {
case 25:
alert("25");
break;
case 35:
alert("35");
break;
case 45:
alert("45");
break;
default:
alert("Other");
}
switch (i) {
case 25:
/* 合并两种情形 */
case 35:
alert("25 or 35");
break;
case 45:
alert("45");
break;
default:
alert("Other");
}
var num = 25;
switch (true) {
case num < 0:
alert("Less than 0.");
break;
case num >= 0 && num <= 10:
alert("Between 0 and 10.");
break;
case num > 10 && num <= 20:
alert("Between 10 and 20.");
break;
default:
alert("More than 20.");
}
switch 语句在比较值时使用的是全等操作符,因此不会发生类型转换(例如,字符串"10"不等于数值 10)。
函数
理解参数
/*
* function functionName(arg0, arg1,...,argN) {
* statements
* }
*/
function sayHi(name, message) {
alert("Hello " + name + "," + message);
}
ECMAScript 中的函数在定义时不必指定是否返回值。
function sum(num1, num2) {
return num1 + num2;
alert("Hello world"); // 永远不会执行
}
ECMAScript 函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。因为 ECMAScript 中的参数在内部是用一个数组来表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数。实际上,在函数体内可以通过 arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数
//arguments 对象只是与数组类似(它并不是 Array 的实例),因为可以使用方括号语法访问它的每一个元素
function sayHi() {
alert("Hello " + arguments[0] + "," + arguments[1]);
}
//通过访问 arguments 对象的 length 属性可以获知有多少个参数传递给了函数
function howManyArgs() {
alert(arguments.length);
}
howManyArgs("string", 45); //2
howManyArgs(); //0
howManyArgs(12); //1
//利用这一点让函数能够接收任意个参数并分别实现适当的功能。
function doAdd() {
if(arguments.length == 1) {
alert(arguments[0] + 10);
} else if (arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
doAdd(10); //20
doAdd(30, 20); //50
ECMAScript 中的所有参数传递的都是值,不可能通过引用传递参数
不能重载
ECMAScript 函数不能像传统意义上那样实现重载。而在其他语言(如 Java)中,可以为一个函数编写两个定义,只要这两个定义的签名(接受的参数的类型和数量)不同即可。如前所述, ECMAScirpt函数没有签名,因为其参数是由包含零或多个值的数组来表示的。而没有函数签名,真正的重载是不可能做到的。
function addSomeNumber(num){
return num + 100;
}
//后定义的函数覆盖会先定义的函数
function addSomeNumber(num) {
return num + 200;
}
var result = addSomeNumber(100); //300