JavaScript的特性 ver.0
JavaScript的许多语法都与Java类似,因此我在这个系列中只会记录一些JS中特有的性质。
0.基本语法:
在语法方面,JS与JAVA一致,都是要求在语句后添加分号。然而JS本身不强求每个语句都要加上分号,浏览器的引擎可以自动添加分号。然而为了避免歧义,最好坚持像JAVA一样添加分号。
1.数据类型:
JavaScript中数字变量只有一种形式:Number类型,它不会区分整型抑或是浮点型。
与JAVA类似,JS中也存在一种类型为‘null', 其表示一种空的值,不同于0(表示一个数值)和‘ ’(表示一个空的字符串),这就表示“空”。然而在JavaScript中,还有一个跟null类似的类型,它就是'undefined', 表示未定义。null表示一个空的值,undefined表示值未定义。然而实际上,区分两者的意义不大。大多数情况下,我们都应该用null
。undefined
仅仅在判断函数参数是否传递的情况下有用。
要特别注意相等运算符==
。JavaScript在设计时,有两种比较运算符:
第一种是==
比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果;
第二种是===
比较,它不会自动转换数据类型,如果数据类型不一致,返回false
,如果一致,再比较。
由于JavaScript这个设计缺陷,不要使用==
比较,始终坚持使用===
比较。
另一个例外是NaN
这个特殊的Number与所有其他值都不相等,包括它自己:
NaN === NaN; // false
唯一能判断NaN
的方法是通过isNaN()
函数:
变量在JavaScript中就是用一个变量名表示,变量名是大小写英文、数字、$
和_
的组合,且不能用数字开头。变量名也不能是JavaScript的关键字,如if
、while
等。申明一个变量用var
语句,比如:var a; var $b=1;
在JavaScript中,使用等号=
对变量进行赋值。可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用var
申明一次,例如:var a; a=1;
JS是动态语言,变量类型不会固定,JAVA是静态语言,定义变量时必须制定变量类型!
Strict模式:
JavaScript在设计之初,为了方便初学者学习,并不强制要求用var
申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var
申明就被使用,那么该变量就自动被申明为全局变量:
i = 10; // i现在是全局变量
在同一个页面的不同的JavaScript文件中,如果都不用var
申明,恰好都使用了变量i
,将造成变量i
互相影响,产生难以调试的错误结果。
使用var
申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内(函数的概念将稍后讲解),同名变量在不同的函数体内互不冲突。
为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制通过var
申明变量,未使用var
申明变量就使用的,将导致运行错误。
启用strict模式的方法是在JavaScript代码的第一行写上:
'use strict';
这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。