zoukankan      html  css  js  c++  java
  • js最基础知识回顾6(变量,预解析,引用,索引)

    一、变量
    1. 作用域:全局、局部、闭包
    2. var a=12;   不加var,会变成全局变量。
    3. 全局变量:容易重名,影响性能
    4. 局部变量和全局变量重名,局部会屏蔽全局。
    5. 给window加东西,是全局的。用途:把封闭空间的东西,变成全局。
    (function(){
        window.a=12;
        alert(a);
    })()
    二、预解析
    1. 系统会把所有变量的声明,放在最上面。只是声明到上面,赋值还在原来的位置。
    2. 预解析的作用域:不会脱离原本的作用域。函数中,变量放在函数最上面;全局中,放在程序最上面。
    3. 作用域可以突破script:读取一个script--->预解析--->执行--->读取下一个script
    <script>
        alert(a);//a is not defined
    </script>
    <script>
        var a = 12;
    </script>
    <script>
        alert(a);//a=12
    </script>
    4. 开始先把变量分配好,避免后面折腾
    5. 函数也有预解析
    if(num%2==0){
        alert('偶数');
    }else{
        alert('奇数');
    }
    var num=12;
    预解析,var num,此处是undefined,所以undefined%2即undefined,为假,所以走else
    例子:
    aaa();//此处报错 aaa is not a function
    var aaa=function(){
        alert(1);    
    }
    所以,函数赋值给变量,按照变量的规则走。
    三、引用
    1. object赋值的时候不会复制,只是两个变量会指向同一块内存。任何东西都是存放在内存中。
    var arr=[12,4,3];
    var arr2=arr;
    arr2.push(6);
    alert(arr+' '+arr2);//都是[12,4,3,6]
    2. 如果想解决,通过for循环单独添加。
    var arr1=[12,5,3];
    var arr2=[];
    for(var i=0; i<arr1.length; i++){
        arr2.push(arr1[i]);
    }
    arr2.push(6);                //arr2=[12,4,3,6];
    alert(arr1+' '+arr2);  //arr1=[12,4,3]
    四、索引
    1. charAt(索引):获取某一位置的字符串;
    2.字符串-->编码: charCodeAt(索引):获取某一位置字符串的编码。
        a->97    b->98    c->99   z->122   =->61   ?->63    1->49    2->50
    3.编码-->字符串: string.fromCharCode(编码)
    for(var i=1;i<=10000;i++){
         document.write(i+"="+String.fromCharCode(i)+"<br />");
    }
    4. 中文:4E00~9FA5: 即19968~40869。js中,十六进制用0x
             4E00-->一
     打印所有的汉字:
      for(var i=0X4E00;i<=0X9FA5;i++){
           document.write(String.fromCharCode(i)+" ");
      }
    5. 使用十六进制表示汉字:alert('u4E00')---  一        其中“”是转义符
    6. 所有字符串都有编码,字符串比较按照编码大小排列
    加密:
    oBtn1.onclick=function(){
          var str=oTxt1.value;
          var str2="";
          for(var i=0;i<str.length;i++){
               str2+=String.fromCharCode(str.charCodeAt(i)+5);
          }
          oTxt2.value=str2;
     }
    五、 关于比较的问题
    (1)字符串比较的是内容,只要文字相同,就相等     a<b    a<z    z>A
    (2)数组:属于object类型,是新建的,所以下面的arr1和arr2不相等
        var arr1=[12,5];
        var arr2=[12,5];
        alert(arr1==arr2);   //false
    (3)函数:
    function aaa(){alert(1);}
    function bbb(){alert(1);}
    alert(aaa==bbb);  //false;
    完整写法:new function();
    所以,只要是new出来的,就不相等。
    (4)字节长度
    字母:1字节       汉字:2个或3个字节    UTF-8格式,占得多3个字节   GB2312--2个字节    可以了解头信息
    计算字节长度
                var str='abc啊';
                function getByLon(str,type){
                    var res=0;
                    for(var i=0;i<str.length;i++){
                        if(str.charAt(i)>='u4e00'&&str.charAt(i)<='u9fa5'){
                            if(type=='utf-8'){
                                res+=3;
                            }else{res+=2;}
                        }else{res++}
                    }
                    return res;
                }
                alert(getByLon(str,'utf-8'));
    六、in——检测属性是否存在
    var json={a:12, b:5};
    alert(a in json);   //报错   因为 不加引号-->变量
    alert('c' in json);  //false
    注意:必须用字符串,只能用于json,不能用于数组
    兼容,但是没啥用
    用什么检测呢?
    var json={a:12, b:5};
    if(json.a){
        alert(1);
    }else{
        alert(0);
    }
    小问题,0是假的,如果恰巧json.a的值是0呢? --弹0
    七、异常
    (1)什么是异常:程序无法处理的错误
    (2)try   catch:防止报错。try中的有问题,catch才会执行
                                     try{alert(getComputedStyle(oBox,false).width)}//可以用则用它;chrome,ff,ie9++;
                                     catch(e){  //e:关于错误的信息;
                                                    //补救的代码:
                                                    //alert(e.message);//错误的详细信息;
                                            alert(oBox.currentStyle.width) //要么用它;ie系列;
                                        }
    try中的代码执行很慢,且不好调试。所以,js中没啥大用。用于应急。
    八、表达式
    (1)赋值表达式:alert(a=12);   赋值语句本身也有值
    (2)连等:alert(a=b=c=5);//5
    (3)逗号表达式:听最后一个。且不能跟var 一起使用。
            逗号的优先级很低。alert((1,3));//必须加();  
                                           if(12,0){ alert(1); }else{ alert(0); }
  • 相关阅读:
    python第八课
    python第七课
    python第六课
    python第五课
    Python基础30类-内置函数实现迭代器协议
    Python基础29类-内置函数(__format__,__slots__,__doc__,__module__,__del__,__call__)
    Python基础28类-内置函数(__getattribute__,__getitem__,__setitem__.__delittem__)
    Python基础27类-包装、组合方式授权、判断对象类型的方法
    Python基础26类-内置函数__setattr__,__getattr__,__delattr__
    Python基础25类-反射
  • 原文地址:https://www.cnblogs.com/yang0902/p/5700693.html
Copyright © 2011-2022 走看看