zoukankan      html  css  js  c++  java
  • JS 杂七杂八细节——语句

    1、switch

      允许 case 后面跟任意的表达式,这和C、Java 等有明显不同。匹配时会先计算case后面的表达式再匹配。
      匹配时用的是 === 符号,而不是 == 符号,所以匹配过程不允许任何类型转换。
      default 放在最后只是逻辑上的需求,而它可以放在 switch 内的任何地方。

            var x = 1;
            
    switch (x + 1) {
                
    case '2':
                    alert(
    'string:2');
                    
    break;
                
    default:
                    alert(
    'default');
                    
    break;
                
    case 1 + 1:
                    alert(
    'number:2');
                    
    break;
            }
            
    // result:
            // 'number:2'
    2、 for/in
      语法:for(variable in object)
      其中 variable  允许任意的表达式,只要计算结果能作为赋值表达式的左侧。
      迭代对象属性名时并不保证任何特殊的迭代顺序,
      它也只迭代用户自定义的属性,而预定义的属性和方法是不会迭代的(比如:Math 的 cos 属性)。
      数组本身是一种特殊的对象,当 for/in 应用于数组时,迭代的是数组的索引
            // 将对象 obj 的属性名复制到数组中
            var obj =
            {
                x: 
    1,
                y: 
    new Date(),
                z: 
    function() { }
            }
            
    var arr = new Array();
            
    var i = 0;
            
    for (arr[i++in obj);
            alert(arr[
    0]);// 'x'
            alert(arr[1]);// 'y'
            alert(arr[2]);// 'z'
    3、break and continue
      break 和 continue 在语法上是相似的,这里只介绍break。
      break 在 JS 中有两种语法:
      1:break;
      2:break labelname;
      第一种用法是常见的,此时的 break 只能放在循环语句或switch语句中。
      第二种用法比较特别,其中涉及到标签(Label)的用法,标签是用一个唯一标识符来标识一个语句,或一个语句块。
      标签语法:identifier: statement;
      相当于为一个简单语句或一个语句块命名。
      break 的第二种用法主要应用在嵌套循环中,在内层循环中,第一种用法只能跳出内层循环,但利用第二种用法可以直接跳出外层循环。
      注意labelname是一个标识符,不能用单引号或双引号括起来。
            var i = 0;
            out:
            
    while (true) {
                
    while (true) {
                    
    break out;
                }
                i
    ++;
            }
            alert(i); 
    // 0
      break 的第二种用法不要求一定要应用在循环或switch语句中。
      continue 的用法类似,以下给出示例:
            var i = 1;
            single:
            {
                
    if (i == 1)
                    
    break single;
                i
    ++;
            }
            alert(i);
            out:
            
    while (i == 1 || i == 3) {
                
    while (true) {
                    i
    ++;
                    alert(i);
                    
    if (i == 2) {
                        
    continue;
                    }
                    
    else {
                        
    continue out;
                    }
                }
                i
    ++;
                alert(i);
            }
            alert(i);
            
    // result:
            // 1  2  3  4  4
      标签及break 的用法是不是挺眼熟的?其实就像C语言中的 goto 语句,但它们事实上完全不同。
    4、function
      方法(function)是在JS代码被解析或编译时被声明定义的。
      当解析器遇到方法定义时,解析器对其进行解析并存储在一个以方法名命名的对象属性中。
      当这个方法是内嵌在其他方法中时,这个属性是 call 对象的属性(每个方法里都有一个call对象,
      而方法里的局部变量或内嵌方法均存储于此对象属性中),否则是全局对象的属性。
      方法和变量是在不同时间被解析定义的,方法是在解析的时候被定义的,而变量是在运行的时候被定义的。以下示例可说明此点:
            f(50);
            
    var f = 10;
            alert(f);
            
    function f(x) {
                alert(x);
            }
            
    // result
            // 50
            // 10
  • 相关阅读:
    POJ3320 Jessica's Reading Problem
    POJ3320 Jessica's Reading Problem
    CodeForces 813B The Golden Age
    CodeForces 813B The Golden Age
    An impassioned circulation of affection CodeForces
    An impassioned circulation of affection CodeForces
    Codeforces Round #444 (Div. 2) B. Cubes for Masha
    2013=7=21 进制转换
    2013=7=15
    2013=7=14
  • 原文地址:https://www.cnblogs.com/lucas/p/1439114.html
Copyright © 2011-2022 走看看