★05.语句

条件语句

if语句

if (x == 1)
    x = 2;
else if (x == 2)
    x = 3;
else
    x = 4;

switch语句

  • C/C++ 的区别,case后面可以跟随任何表达式。
  • 匹配操作用的是===而非==,不会涉及类型转换。
  • 因为不是所有的case表达式都能执行到,所以应当避免有副作用的表达式,而使用 常量表达式
switch (n) {
    case 1:
        break;
    case 2:
        break;
    case 3:
        break;
    case 4:
        break;
    default:
        break;
}

循环

while循环

var count = 0;
while (count <= 10) {
    count++;
}

do/while循环

var count = 0;
do {
    count++;
} while (count <= 10);

for循环

for (var i = 0; i < 10; i++) {
    console.log(i);
}

for/in循环

// 输出数组array所有元素
for (var val in array) {
    console.log(val);
}

// 输出对象obj所有可枚举属性
for (var val in obj) {
    console.log(val);
}

跳转语句

标签语句

  • 可以给语句添加标签,配合breakcontinue使用:
  • 标签名字可以和变量或函数重名。
  • 任何语句可以有多个标签。
// 给while循环添加标签mainloop
mainloop : while(token != null) {
}

break语句

  • 单独使用时的作用是立即退出最内层的循环或switch语句。
  • 配合标签使用可以跳出多层循环。
  • 配合标签使用的示例:
outsideloop: for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 10; j++) {
        if (i == targetI && j == targetJ)
            break outsideloop;
    }
}

continue语句

  • 配合标签使用可以跳出多层循环。
  • 配合标签使用的示例:
outsideloop: for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 10; j++) {
        if (i == targetI && j == targetJ)
            continue outsideloop;
    }
}

return语句

  • 和C语言表现一致。

异常相关 —— throwtrycatchfinally

  • throw可以后接任何类型,通常可以抛出代表错误码的数字,或者可读的错误消息的字符串,或者一个对象内部携带关于异常的必要信息。
  • JavaScript 解释器抛出的异常通常是Error类型及其子类,Error内部包含一个name属性表示错误类型,一个message属性用来存放传递给构造函数的字符串。
  • 可以直接抛出Error类型或者继承Error的子类。
  • 简单示例:
try {
    throw Error("nothing happen");
}
catch (e) {
    // 处理异常
}
finally {
    // 执行清理工作
}
  • 跳转语句与finally的示例:
var foo = function () {
    try {
        throw Error("nothing happen");
    }
    finally {
        return 1;   // 未处理异常直接正常返回
    }
}
foo();

其他语句类型

with语句

  • with语句慢且难以优化,不建议使用。
  • 严格模式下禁止使用with语句。
  • 简单示例:
document.forms[0].address.value

with(document.forms[0]) {
    // 由于with的存在,这里可以直接访问表单元素
    name.value = "";
    address.value = "";
    email.value = "";
}
  • with只能用来查询标识符,而不能创建对象属性:
// 若不存在o.x会报错,但是如果存在,则相提供了访问o.x的快捷方式
with(o) x = 1;

debugger语句

  • debugger语句在调试模式运行时,相当于产生一个断点,普通模式运行时则没有任何效果。
  • 简单示例:
function f(o) {
    if (o === undefined) debugger;  // 调试模式运行时会中断
    ...
}

"use strict"指令

  • "use strict"是指令而不是语句,用于将当前区域声明为严格模式。
  • 指令与语句的区别:
    • 不包含任何语言关键字,仅仅是一个特殊字符串直接量。ES5以后的标准可能会用use用作关键字,这样就能省略引号了。
    • 只能出现在脚本代码的开始或者函数体的开始,任何实体语句之前。
  • 如果函数体定义所处的代码是严格模式或者函数体使用了"use strict"指令,则函数体的代码也是严格模式。
  • 如果eval()调用所处的代码是严格模式或者要执行的字符串使用了"use strict"指令,则eval()内的代码是严格模式。

严格模式

  • 禁止使用with语句。
  • 变量必须使用var事先声明(在非严格模式下,如果不使用var事先声明,则会被当做隐式声明了一个全局变量,不论隐式声明时的作用域在哪)。
  • 函数中的thisundefined,方法中的this是对象(非严格模式下,函数中的this是全局对象)。
  • 通过call()apply()调用函数时,this是传给call()apply()的第一个参数(非严格模式,若thisnullundefined,会被全局对象代替)。
  • 给只读属性赋值或不可拓展的对象创建新成员会抛出 类型错误异常 (非严格模式下,只是操作失败而不报错)。
  • 传入eval()的代码不能声明变量或定义函数。
  • delete运算符的非法使用会抛出 语法错误异常 (非严格模式下,只是操作失败,并返回false)。
  • 在一个对象中定义同名属性会产生语法错误(非严格模式下,不会报错)。
  • 函数声明中有同名参数会报错(非严格模式下,不会报错)。
  • 禁止八进制整数直接量。
  • evalarguments当做关键字。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容