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>