var str='abc123';
num=parseInt(str);
if(num==NaN){
alert('NaN');
}else if(num==123){
alert('123');
}else if(typeof(num)=='number'){
alert('number');
}else{
alert('str');
}
结果:number,因为NaN和它自身是不相等的。
var a=1;b='2';
var c=a>b?(a<b?a:b):(a==b?a:b);
结果:c='2',数据类型是:string
var a=5&4;var b=5||4;
结果:a=4 b=5
for(var i=0;i<10;i++){
alert(i);
break;
}
alert(i);
结果:0 0
for(var i=0;i<10;i++){
continue;
alert(i);
}
alert(i);
结果: 10
var a=0; function fun(){ alert(a); var a=10; } fun(); alert(a);
结果:undefined 0
var o={};
o.a=0;
var b=o;
b.a=10;
alert(o.a);
结果是:10
function fun(){
this.a=0;
this.b=function(){
alert(this.a);
}
}
fun.prototype={
b:function(){
this.a=20;
alert(this.a);
},
c:function(){
this.a=30;
alert(this.a);
}
}
var my_fun=new fun();
my_fun.b();
my_fun.c();
结果:0 30
var n=0;
function a(){
var n=10;
function b(){
n++;
alert(n);
}
b();
return b;
}
var c=a();
c();
alert(n);
结果:11 12 0
<!DOCTYPE html>
<html>
<body>
<div id="btnBox">
<input type="button" value="button_1" />
<input type="button" value="button_2" />
<input type="button" value="button_3" />
<input type="button" value="button_4" />
<input type="button" value="button_5" />
</div>
<script type="text/javascript">
var inputs=document.getElementsByTagName('input');
var l=inputs.length;
for(var i=0;i<l;i++){
/*inputs[i].onclick=function(){
alert(i);
}*/注释是错误代码
(function(i){
inputs[i].onclick=function(){
alert(i);
}
})(i)
}
</script>
</body>
</html>
下面做下分析:因为在for循环里面指定给list_obj[i].onclick的事件处理程序,也就是onclick那个匿名函数是在for循环执行完成后(用户单击链接时)才被调用的。而调用时,需要对变量i求值,解析程序首先会在事件处理程序内部查找,但i没有定义。然后,又到方法外部去查找,此时有定义,但i的值是4(只有i大于4才会停止执行for循环)。因此,就会取得该值——这正是闭包(匿名函数)要使用其外部作用域中变量的结果。而且,这也是由于匿名函数本身无法传递参数(故而无法维护自己的作用域)造成的。
那现在原因是知道了,如何来避免这种情况呢?
既然已经知道函数调用外部变量的时候就构成了一个闭包,里面的变量会受到别的地方的影响,那么我们
现在要做的就是,构建一个只有自己本身才可访问的闭包,保存只供本身使用的变量
不新建数组去重:
function undulpicate(array){
for(var i=0;i<array.length;i++) {
for(var j=i+1;j<array.length;j++) {
//注意 ===
if(array[i]===array[j]) {
array.splice(j,1);
}
}
}
return array;
}
var a=[1,2,3,4,4,3,2,1];
var b=undulpicate(a);
console.log(b);
方法二:
function unique(arr) {
var result = [], hash = {};
for (var i = 0, elem; (elem = arr[i]) != null; i++) {
if (!hash[elem]) {
result.push(elem);
hash[elem] = true;
}
}
return result;
}
var c=unique(a);
console.log(c);