javascript 学习笔记

一、严格模式

1.javascript 在ECMA262version 引入严格模式 ,使用方法如下

<script type="text/javascript">
    "use strict"
    x =1;             //x is not defined 正确表示为 var x=1;
    
    function c(){
        "use strict"
        g =1;        //g is not defined  正确表示为 var g=1;
    }
    c();
    
    eval("var m =1;");
    
    alert(m);            //m is not defined 无法使用eval 中声明的变量
    
</script>

使用关键字 "use strict", 如果再全部作用域声明则对全部有效。而在局部作用域则只对局部代码有效。

在严格模式下有几个特点:

1、变量必须使用var 进行声明。

2、eval表示式中声明的变量无法在外部使用。

3、对象内或者函数内变量名重复(暂时没测试出效果)。

二、浮点数 的比较

  JavaScript中不能直接使用浮点数进行比较 8.1/3==2.7 为false,因为8.1/3=2.69999999999。所以应该根据精度的的要求上进行放大后再比较,代码如下:

<script type="text/javascript">
var d =8.1/3;
if(Math.round(d*Math.pow(10,1))==2.7*Math.pow(10,1) ){
    alert('equals');
}else{
    alert('not equals');
}
</script>

 三、操作符

  1、关系操作符 in, instanceof, 测试代码如下:

  

<script type="text/javascript">
var prop =["a","c"];
var obj ={
    a:1,
    n:1
};
for(var i in prop){
    if(prop[i] in obj){
        document.writeln('<br/>obj contain '+prop[i]);
    }
    else{
        document.writeln('<br/>obj not contain '+prop[i]);
    }
}

//输出结果如下:
//obj contain a
//obj not contain c

function person(){}

function animal(){}

var p = new person();
var a = new animal();
var instanceArr =[p,a];

for(var i in instanceArr){
    if(instanceArr[i] instanceof person){
        document.writeln('<br/>is instanceof person ');
    }else{
        document.writeln('<br/>is not instanceof person ');
    }
}

//输出结果如下:
//is instanceof person 
//is not instanceof person

</script>

  2、一元操作符 "+","-","delete"

<script type="text/javascript">
var str1 ="xx11xx";
var str2 ="22";
var num1 =+ str1;
var num2 =+ str2 ;
document.writeln('<br/> 值= '+str1 + '  类型 '+typeof str1);    //string 
document.writeln('<br/> 值= '+str2 + '  类型 '+typeof str2);    //string 
document.writeln('<br/> 值= '+num1 + '  类型 '+ typeof num1);    //number  
document.writeln('<br/> 值= '+num2 + '  类型 '+ typeof num2);    //number

var arr =["00","11","222"];
var obj ={a:1,b:2};
document.writeln("<p>删除数组前</p>");
print(arr);        //["0", "11", "222"]
delete arr[0];
document.writeln("<p>删除数组后</p>");        //监视值[undefined × 1, "11", "222"]
print(arr);
document.writeln("<p>删除对象前</p>");
print(obj);                                    //监视值Object {a: 1, b: 2}
delete obj["a"];
document.writeln("<p>删除对象后</p>");
print(obj);

function print(collection){
    for(var key in collection){
    document.writeln("<p>"+collection[key]+"</p>");
    }
}

</script>

输出结果如下:

值= xx11xx 类型 string 
值= 22 类型 string 
值= NaN 类型 number 
值= 22 类型 number
删除数组前

00

11

222

删除数组后

11

222

删除对象前

1

2

删除对象后

2

 

四、闭包

下面代码简单演示了通过闭包实现对定时器的调用

<html>
<head>
<title>jquery test</title>
</head>
<body>

<p id="p1"></p><p id="p2"></p>
<div>
<select id="selectP">
    <option value="p1">p1</option>
    <option value="p2">p2</option>
</select>
<input type="button" id="btnSet" value="set"/>
<input type="button" id="btnClear" value="clear"/>
</div>
<script type="text/javascript">

function TimeIntervalSwitch(element){
    var timeinterval ;
    return  {
        set:function(){
            timeinterval = setInterval(function(){
                element.innerHTML+='txt...';
            },1000);
        },
        clear:function(){
            clearInterval(timeinterval);
        }
    };
}

var p1 = TimeintervalSwitch(document.getElementById("p1"));

var p2 = TimeintervalSwitch(document.getElementById("p2"));

document.getElementById("btnSet").onclick=function(){
  var p = document.getElementById("selectP");
  if(p.value=="p1"){
    p1.set(); 
  }else{
    p2.set();
  }
}

document.getElementById("btnClear").onclick=function(){
  var p = document.getElementById("selectP");
  if(p.value=="p1"){
    p1.clear(); 
  }else{
    p2.clear();
  }
}

</script>
</body>
</html>

 

 

  

 

posted @ 2016-01-12 15:17  holy_night  阅读(174)  评论(0编辑  收藏  举报