javaScript的诞生就是个非常仓促的过程,但是却在诞生短短一年半就发布了国际标准,以至于有缺陷没来得及修复就已经被置顶为国际标准,反观c语言,是在诞生20多年才统一了国际标准.但是javaScriptr虽然漏洞很多,但是却随着web的迅猛发展,一路高歌猛进.
浅谈JavaScript中的神奇现象(漏洞)
1.null 和 undfined
先来说一下神奇的null和undfined,null属于对象(object)的一种,意思是该对象为空;undefined则是一种数据类型,表示未定义。
typeof null; // object typeof undefined; // undefined
看起来貌似很正常,那么我们申明一个变量
var variable; alert(variable== null); // true alert(variable== undefined); // true
如果我们用===来判断的话
var variable; alert(variable== null); // false alert(variable== undefined); // true
2.==和===
==用来判断两个值是否相等。当两个值类型不同时,会发生自动转换,得到的结果非常不符合直觉。
"" == "0" // false 0 == "" // true 0 == "0" // true false == "false" // false false == "0" // true false == undefined // false false == null // false null == undefined // true " \t\r\n" == 0 // true
所以任何时候都推荐用===做比较符
3.分号问题
在写js代码时,每一行都必须以分号结尾。但是,如果你忘记加分号,解释器并不报错,而是为你自动加上分号。有时候,这会导致一些难以发现的错误。
function(){ return { i=1 }; }
这几行代码报错的原因就是,在return后面自动加了分号
4.+号问题
+既可以用来在加法的运算符,又可以用来拼接字符串.这就很神奇了
alert(1+1); // 2 alert("1"+"1"); // 11
如果被操作的一方是字符串,一方是数字
alert(1+'2'); // 12 alert(1+"10"); // 110
这种情况就会造成,如果我们不知道数据类型的情况下非但不会报错.还会得到我们预期之外的结果.
戏谈戏谈!! 日后更新!!