概述:
JavaScript 是一个面向对象的动态语言;它有类型和运算符,内置对象和方法。它的语法来源于 Java 和 C 语言,也有许多来源于其他语言的结构被应用在 JavaScript 中。(和其他语言的相比)一个关键性差异是 JavaScript 中没有类;然而类的功能可以由类原型来完成。另一个主要差异是方法就是对象,使得它具有执行代码和像其他任何对象一样被传递的能力。现在,我们开始学习所有语言中都有的内容:类型。JavaScript程序操作值,并且这些值都是属于一个类型的。JavaScript的类型包括:
Numbers
Strings
Boolean
Functions
Objects
oh,还有Undefined和Null,这两个有点特殊。还有数组,它是一种特殊类型的对象。还有日期和正则表达式,这两个对象是可以直接使用的。还有严格意义上说,函数也是一种特殊类型的对象,所以类型表应该是下面这样的:
Number
String
Boolean
Object
Function
Array
Date
RegExt
Null
Undefined
JavaScript也有一些内置的Error类型,尽管如此,如果我们坚持第一个列表,事情会简单许多。
Numbers
根据IEEE754规范,JavaScript中的Numbers是双精度64位的值。这会产生一些有趣的结果。JavaScript中没有Integer类型,如果之前你使用C或者Java,那么在运算的时候你需要小心一些。注意下面这个场景:
0.1 + 0.2 == 0.30000000000000004
实际上,Integer值是32位的整数(在某些浏览器中是这种方式存储的),这对位运算非常重要。想了解更多可以查看The CompleteJavaScript Number Reference。
JavaScript支持数字运算的标准,如加减乘除(或者模运算)等等。这里也涉及到一个之前忘记提到的内置对象,叫做Math,它可以处理许多高级数学函数和常量。
Math.sin(3.5);
var d = Math.PI * r * r;
你可以用内置方法parseInt将一个字符串转换为一个整数,它接受一个基数作为第二个可选的参数来完成转换,通常你都需要提供这个参数(这个基数就是通常说的进制数)。
> parseInt("123", 10)
123
> parseInt("010", 10)
10
如果你不提供这个基数,那么在一些较老的浏览器中你会得到意想不到的结果
> parseInt("010")
8
这种情况的发生,是因为这个字符串以0开头,parseInt方法把这个字符串当做是八进制数处理
如果你想把一个二进制数转换成一个整数,只需要修改基数:> parseInt("11", 2)
3
类似的,你可以用内置方法parseFloat去解析浮点数,它始终用10来作为基数,这一点和它的“堂兄弟”parseInt不同。
你也可以使用一元运算符+将值转为数字
> + "42"
42
如果这个字符串是一个非数字的值,那么将会返回一个特殊值NAN(Not a Number的简写)
> parseInt("hello", 10)
NaN
NAN是有毒的:如果你把它当做一个输入值做任何数学运算,结果也将会是NAN:
> NaN + 5
NaN
你可以用内置函数isNAN来测试一个值是否是NAN
> isNaN(NaN)
true
JavaScript也有特殊字Infinity和-Infinity(正无穷大和负无穷大)
> 1 / 0
Infinity
> -1 / 0
-Infinity
可以用内置函数isFinite来判断一个值是不是Infinity,-Infinity或者NAN:
> isFinite(1/0)
false
> isFinite(-Infinity)
false
> isFinite(NaN)
false
注意:parseInt和parseFloat方法解析一个字符串直到碰到的不是一个合法数字格式的字符,然后返回解析到那个位置的数字。然而当使用“+”运算符时如果碰到一个不合法的字符,它只是简单将这个字符串转换成NAN
Strings
如果你想表示一个单独的字符,只需要使用一个长度为1的字符串就可以了。
使用字符串的length属性,可以得到这个字符串的长度这是我们学习JavaScript对象的第一把刷子!还记得我提到的strings就是对象吗?它们也有方法
> "hello".charAt(0)
h
> "hello, world".replace("hello", "goodbye")
goodbye, world
> "hello".toUpperCase()
HELLO
其他类型:
JavaScript中null和undefined的区别。null是一个object类型的对象,表示是一个特指的空值,而undefined,是一个undefined类型的对象,表示没有初始化的值,也就是说,还没有分配一个值(给变量)。后续我们会讨论变量,但是在JavaScript中是允许声明一个变量却不给它分配一个值的。如果你这么做了,那么这个变量的类型就是undefined。
JavaScript有一个布尔类型,它的取值范围是true和false(它们两个都是关键字)。任何值依据下面的规则转换成一个布尔型的值。
1.False,0,空串(””),NAN,null和undefined都将转换为false
2.其他的都转换为true
你可以使用 Boolean 方法来显示的完成这个转换:
> Boolean("")
false
> Boolean(234)
true
然而,很少有必要这么做,因为当需要一个布尔值的时候,
JavaScript
默认会执行这个转换,就像在
if
语句里面(见下面例子)。因为这个原因,我们有时就简单的说真值和假值,表示值被转换成布尔类型的值时分别会变转换为
true
和
false
。或者,这些值会被分别叫做
truthy
和
falsy
。(它们分别是
true
和
false
的字面量)
Boolean值支持Boolean运算,像&&(逻辑与)||(逻辑或)和!(逻辑非),看下面例子:
&&和||运算符会使逻辑短路,意味着会根据第一个操作数的结果来决定是否执行第二个操作数。这对在使用一个对象的属性之前检测对象是否是null非常有效。
var name = o && o.getName();
Or运算符可用来设置默认值:
var name =otherName || "default";
JavaScript
有个三目运算符,用来计算条件表达式:
var allowed = (age > 18) ? "yes" : "no";