js一起学08:DOM基础——变量、预解析、引用、索引、比较、排序、异常、表达式...

一、变量
1. 作用域:全局、局部、闭包
2. var a=12;   不加var,会变成全局变量。
3. 全局变量:容易重名,影响性能
4. 局部变量和全局变量重名,局部会屏蔽全局。
5. 给window加东西,是全局的。用途:把封闭空间的东西,变成全局。
(function(){
    window.a=12;
    alert(a);
})()
二、预解析
1. 系统会把所有变量的声明,放在最上面。只是声明到上面,赋值还在原来的位置。
2. 预解析的作用域:不会脱离原本的作用域。函数中,变量放在函数最上面;全局中,放在程序最上面。
3. 作用域无法突破script:why?读取一个script--->预解析--->执行--->读取下一个script
<script>
    var a = 12;
</script>
<script>
    alert(a);
</script>
4. 开始先把变量分配好,避免后面折腾
5. 函数也有预解析
if(num%2==0){
    alert('偶数');
}else{
    alert('奇数');
}
var num=11;
预解析,var num,此处是undefined,所以undefined%2即undefined,为假,所以走else
例子:
aaa();
var aaa=function(){
    alert(1);     //此处报错
}
所以,函数赋值给变量,按照变量的规则走。
三、引用
1. 赋值的时候不会复制,只是两个变量指向同一块内存。任何东西都是存放在内存中。
var arr=[12,4,3];
var arr2=arr;
arr2.push(6);
alert(arr+'\n'+arr2);
2. 如果想解决,自己动手。
var arr1=[12,5,3];
var arr2=[];
for(var i=0; i<arr1.length; i++){
    arr2.push(arr1[i]);
}
arr2.push(6);
alert(arr1+'\n\+arr2);
四、索引
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.οnclick=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格式,占得多   GB2312--2个字节    可以了解头信息
计算字节长度
var str="国际惯例aagdry热狗机哦"
var count=0;
for(var i=0;i<str.length;i++){
    if(str.charCodeAt(i)>=19968&&str.charCodeAt(i)<=40869){
        count+=3;
    }else{
        count++;
    }
}
六、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是假的,如果恰巧a的值是0呢?
七、sort排序
原理:找到最小的,和第一个交换。交换两个数,中间变量
var arr=[345,33,27,858,5,3];
for(var i=0; i<arr.length;i++){
    for(var j=0; j<arr.length; j++){
        var tmp;
        tmp=arr[i];
        arr[i]=arr[j];
        arr[j]=tmp;
    }
}
alert(arr);
八、异常
(1)什么是异常:程序无法处理的错误
(2)try   catch:防止报错。try中的有问题,catch才会执行
try{
    var oDiv=document.getElementsByTagname('div')[0];
};
catch(e){     // e:错误对象,相当于一个参数
    alert(e);
}
alert(1);
try中的代码执行很慢,且不好调试。所以,js中没啥大用。用于应急。
九、表达式
(1)赋值表达式: alert(a=12);   赋值语句本身也有值
(2)连等:alert(a=b=c=5);
(3)逗号表达式:听最后一个。且不能跟var 一起使用。
逗号的优先级很低。alert((1,3));    if(12,0){ alert(1); }else{ alert(0); }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值