容易犯的javascript小错误

容易犯的javascript小错误

不好的代码习惯

1
2
3
4
5
6
7
8
var ex =function()
{
return
{
name:"snoopyxdy"
};
}();
alert(ex.name); //ex is undefined (令人惊讶吧!)

完全没有语法错误的代码,为什么会报错呢?

坑爹的日期格式

1
2
3
4
var mydate = new Date('2010-09-10');
var mydate2 = new Date('2010-09-10 19:01:10');
alert(mydate); //Fri Sep 10 2010 08:00:00 GMT+0800
alert(mydate2); //Invalid Date (坑爹吧)

一样的日格式,为什么加了时分秒就出错了呢?

小学数学没学好

1
2
3
4
5
var a = 0.1;
var b = 0.3;
var c = 0.2;
alert(a+b); //0.4
alert(a+c); //0.30000000000000004 (我的天啊!)

为什么0.1+0.2不等于0.3呢?

不好的代码习惯

1
2
3
4
5
6
7
8
var ex =function()
{
return
{
name:"snoopyxdy"
};
}();
alert(ex.name); //ex is undefined (令人惊讶吧!)

完全没有语法错误的代码,为什么会报错呢?

邪恶的孪生兄弟

1
2
3
4
5
6
7
8
alert(""=="0");   //false
alert(0==""); //true
alert(false=="false"); //false
alert(false=="0"); //true
alert(false==undefined); //false
alert(false==null); //false
alert(null==undefined); //true
alert("\t\r\n"==0) //true

为什么这些东西有的是TRUE有的是FALSE呢?

数组的赋值

1
2
3
4
5
var a = [1,2,3];
var b = a;
a.pop();
alert(b[1]); // 2
alert(b[2]); // undefined

我明明改了数组A为什么数组B也改了呢?

parseInt短路了吗

1
2
alert(parseInt('05'))   //5
alert(parseInt('09')) //0

为什么字符串09改整形会变成0?

不好的代码习惯

1
2
3
4
5
6
7
8
alert1();  //11
alert2(); //alert2 is not a function
function alert1(){
alert(11);
}
var alert2 = function(){
alert(22)
}

为什么alert2这个函数无法正常运行呢?

不好的代码习惯

1
2
3
4
5
6
7
8
var ex =function()
{
return
{
name:"snoopyxdy"
};
}();
alert(ex.name); //ex is undefined (令人惊讶吧!)

完全没有语法错误的代码,为什么会报错呢?

牛B的wzh文件

1
<script type="text/javascript" src="http://snoopyxdy.blog.163.com/blog/myjs.wzh"></script>

myjs.wzh内容为:alert(“我来自myjs.wzh”);
运行脚本结果:alert(“我来自myjs.wzh”);
明明加载的是.wzh文件,怎么可以运行js脚本啊?

完全没有语法错误的代码,为什么会报错呢?

不好的代码习惯

1
2
3
4
5
6
7
8
var ex =function()
{
return
{
name:"snoopyxdy"
};
}();
alert(ex.name); //ex is undefined (令人惊讶吧!)

完全没有语法错误的代码,为什么会报错呢?

比较出问题了

1
2
3
4
5
6
var a = '23';
var b = '3';
if(a<b){ //true
alert("my god!");
//do somthing
}

这里的IF语句执行了!

函数的赋值

1
2
3
4
5
6
7
function sum(s1,s2){
return s1+s2
}
var a_sum = sum;
sum = null;
alert(sum(10,10)); //出错
alert(a_sum(10,10)); //20

为什么这里的赋值结果和数组的赋值结果不一样呢?

关于new创建的引用类型实例和自动创建的基本包装类型对象

1
2
3
4
5
6
7
var s1 = "aaa";
s1.color = "xxx";
alert(s1.color); //undefined

var s2 = new String("aaa")
s2.color = "xxx";
alert(s2.color); //xxx

为什么2个结果完全不一样呢?

关于Boolean对象

1
2
3
var bl = new Boolean("false");
var r = bl && true;
alert(bl); //true

这是什么情况呢,判断出问题了?

关于i++

1
2
3
4
var i = 0;
var a = [1,2];
var b = a[i++];
alert(b); //1

为什么b不是2呢?

关于匿名函数

1
2
3
4
5
6
7
8
var x = function(){
alert('x');
};
var y = function(){
alert('y');
}();
x(); //alert('x')
y(); //y is not a function

为什么y不能运行呢?

还是关于代码风格

1
2
3
4
5
var foo = function(){ alert("aa"); };
//foo();
(function(){ alert("bb"); }());
//alert(bb)
//alert(aa)

为什么aa和bb都alert了呢?

关于变量定义

1
2
3
4
5
6
7
8
var foo = 1;    
function bar() {
if (!foo) {
var foo = 10;
}
alert(foo);
}
bar();

看下运行结果吧,alert了10!

关于函数定义

1
2
3
4
5
6
7
8
var a = 1;    
function b() {
a = 10;
return;
function a() {}
}
b();
alert(a);

看下运行结果吧,alert了1!

暂且先写到这里吧,以后碰到再补充吧~