• 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
  • 相关阅读:
    剑指offer之 二维数组的查找
    常用的基础算法总结之 希尔排序
    让shell脚本中的echo输出带颜色
    nginx利用lua实现nginx反向代理proxy_store缓存文件自删除
    LNMP平滑升级nginx并安装ngx_lua模块教程
    nginx的luajit安装luarocks并安装luafilesystem
    PHP图片识别成文字
    使用tesseract-ocr破解网站验证码
    利用开源程序(ImageMagick+tesseract-ocr)实现图像验证码识别
    http://ocr.wdku.net/
  • 原文地址:https://www.cnblogs.com/lucas/p/1439114.html
Copyright © 2020-2023  润新知