原文:http://h01mes.com/veteran-new...
我仍然记得在一个ajax小项目踩到跨域问题(CORS)的坑,最后用Chrome插件解决。由此对Javascript这个奇怪的语言留下很深的印象。现在,Javascript在前后端都取得非常大的影响力,已然成为了全栈的同义词。所以我决定认真搞一搞这个语言。顺带一提,跨域可以用Moesif解决。
本文不会讨论初级的编程问题,比如if else,for循环,已经面向对象。如果您还不熟悉这些,请先出门左转,网上有足够多的资料讨论这些大同小异的概念。
本文主要关注一些离散的,即学即用的知识点,和一些在日常编程中容易踩得坑。
用==和===进行比较
==会对运算对象进行类型自动转换,所以可以认为==等同于值比较。
===不做类型转换,所以如果比较对象的类型不一致,===直接返回false。有些文章说===是引用比较,个人认为并不准确。
例子:
<html>
<head>
<script>
//comparing string with number
var res = "1" == 1;
alert(res);
res = "1" === 1;
alert(res);
//comparing two special type with the same value
res = null == undefined;
alert(res);
res = null === undefined;
alert(res);
//comparing number with object
var obj = new Number(123);
res = 123 == obj
alert(res)
res = 123 === obj
alert(res)
</script>
</head>
<body>
</body>
</html>
运行结果是:
true
false
true
false
true
false
这里,NaN === NaN 永远是返回false。所以我们只能用isNaN()来判断NaN。
===类似于其它语言的==;==则类似于equals()或其它类似函数。所以划分这两个等于符还有点意义。但是下面的这个划分就完全是怪异了。
注:===和==的完整的行为表
来源:http://dorey.github.io/JavaSc...
用undefined和null来表示空值
简单来说,undefined是由Javascript运行时默认赋值给变量的,而null则是由程序员来显式赋值。当程序员给一个变量赋值为null时,通常表示这个变量已经不用了。
更多例子:
<html>
<head>
<script>
var res;
alert(res);
res = null;
alert(res);
</script>
</head>
<body>
</body>
</html>
运行结果:
undefined
null
接下来,我们来看看更多关于undefined 的例子:
<html>
<head>
<script>
var res = [1,2,3];
alert(res[10]);
function doSomething(first, second, optional) {
alert(optional);
}
doSomething(1,2);
</script>
</head>
<body>
</body>
</html>
运行结果:
undefined
undefined
现在你可以发现,如果一个变量没有被显式赋值,例如,数组越界访问,或者访问没有被传值的参数,javascript运行时会用undefined来填补这个值。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。