原文:http://h01mes.com/veteran-new...javascript
我仍然记得在一个ajax小项目踩到跨域问题(CORS)的坑,最后用Chrome插件解决。由此对Javascript这个奇怪的语言留下很深的印象。如今,Javascript在先后端都取得很是大的影响力,已然成为了全栈的同义词。因此我决定认真搞一搞这个语言。顺带一提,跨域能够用Moesif解决。html
本文不会讨论初级的编程问题,好比if else,for循环,已经面向对象。若是您还不熟悉这些,请先出门左转,网上有足够多的资料讨论这些大同小异的概念。java
本文主要关注一些离散的,即学即用的知识点,和一些在平常编程中容易踩得坑。git
==会对运算对象进行类型自动转换,因此能够认为==等同于值比较。
===不作类型转换,因此若是比较对象的类型不一致,===直接返回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>
运行结果是:github
true false true false true false
这里,NaN === NaN 永远是返回false。因此咱们只能用isNaN()来判断NaN。web
===相似于其它语言的==;==则相似于equals()或其它相似函数。因此划分这两个等于符还有点意义。可是下面的这个划分就彻底是怪异了。ajax
注:===和==的完整的行为表chrome
来源:http://dorey.github.io/JavaSc...编程
简单来讲,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来填补这个值。