那些奇奇怪怪的语句

标签语句

标签由语句前面的标识符与冒号组成:

identifier: statement

可以形象的理解为标签名就是语句块的一个外号,比如我们一说卷福,就知道是这个家伙

这里写图片描述

要注意的是,标识符一定要合法,不能是保留字

说了这些注意事项,那么,标签能干些什么呢?事实证明,当给语句块定义标签的时候,它才会更有用。一般情况下,我们会将标签与break(跳出循环)和continue(跳过本次循环)相结合,从而达到好的效果。我们来看这个例子:

var i = 10;
loopFirst: while(i){
    i--;
    loopSec: for(var j = 0; j < 3; j++){
        console.log('j=' + j);
        if(i==7 && j == 2){
            console.log('j=' + j + ' i=' + i);
            break loopFirst;
        }
    }
    if(i == 8) {
        continue loopFirst;
    }
    console.log('j=' + j + ' i=' + i);
}

控制台输出:
可以看到,当i=8时,continue loopFirst跳过了内层循环,没有输出i=8;当i==7 && j == 2时,break loopFirst跳过了外层循环,程序戛然而止。
这里写图片描述

1.这里的break与标签之间不能换行,否则就会被浏览器解析为单个的break,也就是说浏览器会自作多情的在break后面添加一个分号,
2.continue只会跳过当前这一次循环进入下一次循环

throw语句

语法如下

throw expression;

举例判断正整数

function positiveInt(value){
    if(value<0) throw new Error('positiveInt: value must >= 0');
    if(value-Math.floor(value)) throw new Error('positiveInt: valur must be integer');
}
positiveInt(90.3);

控制台输出:
这里写图片描述

延伸Error
构造函数:new Error(); or new Error(massage);
参数massage表示一条提供异常的细节的错误信息。
name:一个指定该异常的类型的字符串,就相当于是异常错误的名字。

try/catch/finally语句

  1. try/catch/finally语句是JavaScript的异常处理机制,其中try定义了需要处理的异常所在的代码块,catch语句跟随在try语句后面,当try语句内某处发生异常的时候,调用catch内部的代码逻辑,catch后面紧跟finally块,finally块中放置清理代码,不管try中是否发生异常,finally总会运行。
  2. finally与catch是可选的,但是try至少需要二者之一才能组成完整的语句。
  3. 三者都必须使用花括号将其内容语句包裹起来,即使只有一条也不可以省略。
  4. try的代码块有可能抛出异常,当抛出异常的时候catch捕获异常,这时才会执行catch的代码。无论try是否抛出异常,finally执行
  5. catch具有内部作用域,也就是说内部定义的变量只在catch中才有定义

他们三个的关系就像一家三口,小孩子try有时会犯错,这个时候严父catch发现了,说不对,你发错了!然后把try打一顿,慈母finally不会管try是否犯错了,她永远都是try的坚实后盾,为try处理事后。

好啦,现在举个栗子:

//这里我们使用上面的函数
function positiveInt(value){
    if(value<0) throw new Error('positiveInt: value must >= 0');
    if(value-Math.floor(value)) throw new Error('positiveInt: valur must be integer');
}
try{
    positiveInt(90.3);
}
catch(e){
    alert(e);
}
finally{
    console.log('game over');
}

浏览器弹出:

这里写图片描述

最后finally执行输出:
这里写图片描述

当然,如果在这里传入一个正整数,finally还是会输出。

with语句

with(object)
statement

这条语句的作用就是将Object添加到作用域链的头部,然后在执行statement之后将作用域链恢复。

首先,我们需要知道with的作用是什么?with方法减少了大量的输入,这样做可以使代码简洁,with就相当于代替了Object,在statement中,我们可以直接使用属性名。

当然,这也是它的缺点,在大量代码的情况下容易造成语义不明,代码的可读性就比较差了。在严格模式下,是禁止使用with的,在非严格模式下也是不建议使用的,with语句难于优化,并且运行相较会慢。

var obj = {
    value:12,
    first:'a',
    sec:'b'
}
with(obj){
    console.log(value , first , sec); //12 "a" "b"
}

debugger语句

debugger语句就是来产生一个断点的。当JavaScript执行过程中遇到了debugger语句的时候,就会停止在断电的位置,这是可以使用调试器进行调试。当然,这就比较麻烦啦~浏览器可以很好的打断点啊
F12 -> source -> 点击你需要处理的文件,然后在要打短点的行标处点击一下,断点打上。

这里写图片描述
(我在第十行打了一个断点,之后你就可以在console界面上进行一系列的操作啦)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值