JavaScript中的数据类型回顾

一、标识符(Names)

标识符由一个字母、下划线和美圆符开头,其后能够选择性的加上一个或多个字母、数字或下划线。标识符不能使用下面这些保留字:java

abstract
boolean、break、byte
case、catch、char、class、const、continue
debugger、default、delete、do、double
else、enume、export、extends
false、final、finally、float、for、function
goto
if、implement、import、in、instanceof、int、interface
long
native、new、null
package、private、protected、public
return
short、static、supper、switch、synchronized
this、throw、throws、transient、true、try、typeof
var、volatile、void
while、with

在这个列表中大部分保留字还没有在这门语言中使用。这个列表不包括一些本应该被保留而没有保留的字,诸如undefined、NaN和Infinity。JavaScript不容许使用保留字来命名变量或参数。更糟糕的饿是,JavaScript不逊雨在对象字面量中,或者用点运算符提取对象属性时,使用保留字做为对象的属性名。git

标识符被用于语句、变量、参数、属性名、运算符和标记。github

二、数值(Numbers)

与其余任边吃语言同样,JavaScript能够处理诸如数据或文本的值。一门语言可使用的值的类型,称为该语言的数据类型。JavaScript支持基本的数值和字符串的数据类型。在JavaScript中,全部数值都是64位双精度的,取值范围从-5e-324到1.7976931348623157e308。也就是说,在JavaScript中整数和浮点数之间并无什么区别,两者都是数值。下面的例子使用了typeof操做符进行演示:正则表达式

> typeof 1;
"number"
> typeof 1.5;
"number"

全部JavaScript数值都是按照IEEE-754双精度二进制数标准进行表示。当执行算术运算时应该注意一些问题。例如,在把两个数值相加时,在你的脑海中这是一个通用的操做,然而在JavaScript中可能会得到使人大感意外的结果,下面的代码演示看着一问题:app

> .1 + .2;
0.30000000000000004

JavaScript没有内置的十进制数据类型,但JavaScript为数值提供了两个方法:toPrecision和toFixed,这两个方法能够按照固定位数的小数来格式化数值。下面的代码演示了着两个方法的使用:函数

> var num = 1234.123454321;
> num.toFixed(2);
"1234.12"
> var num2 = 1234.123454321;
> num2.toPrecision(8);
"1234.1235"

若是使用了一个超出64位范围的数值,或者得到一个超出64位范围的值,JavaScript将返回一个特殊的值:Infinity(无穷大)或者-Infinity(负无穷大)。除数为0将返回Infinity。其余特殊值还包括NaN,他表示一个“非数值”,她是一个容易产生错误的值,经常是一些BUG的根源。网站

当试图将一个无效字符串对象转换为一个数值时,结果为NaN值。NaN具备“毒性”,在NaN值与数值之间执行一个操做将返回一个NaN值。可使用内置的isNaN()函数来检查一个变量是不是NaN值。this

> 10 * 1 + 100 - 1 -NaN;
NaN
> var x = NaN;
> isNaN(x);
true

JavaScript支持八进制(基数为8)和十六进制(基数为16)。八进制字面值用一个0(即零)做为前缀,十六进制数值则以一个x做为前缀。debug

JavaScript内置Math对象用于常见的数学运算。例如,可使用Math.round()方法得到两位数的精度。code

> Math.round( (.1+.2)*100)/100;
0.3

充分利用内置对象能够节省时间、提升效率。

三、字符串(Strings)

字符串是一个由0个或多个16位的Unicode字符组成的系列,使用单引号或双引号将字符串括起。这里强调它是Unicode字符,是出于国际化环境中使用JavaScript的重要性。JavaScript中没有为字符串定义特殊的数据类型。字符串也是(不可变)对象,一旦被建立,就永远没法改变它。但你能够很容易的经过 + 运算符链接其余字符串来建立一个新字符串。两个包含着彻底相同的字符且字符顺序也相同的字符串被认为是相同的字符串。因此:

> 'c' + 'a' + 't' === 'cat';
true

字符串是对象,所以字符串具备一些相应的属性和方法。字符串有一个length属性。例如,"JavaScript".length是10;再好比下面的代码:

> 'test String'.indexOf('s');
2
> 'test String'.charAt(5);
"S"

咱们也能够扩展内置的String对象以知足开发人员的须要。

四、布尔(Boolean)

Boolean类型表示true值和false值。在适当的上下文中,好比在一个if语句中,任何条件判断的值都将被转换为Boolean值以判断“真”或“假”。在判断条件中,空字符串、NaN值、null、undefined、数值0和关键字false都将被计算为false,其它的任何值都将被解析为true。

if('') {
  console.log('something happens');
} else {
  console.log('nothing happens');
}
//输出:nothing happens

JavaScript支持的布尔操做包括:逻辑与(&&)、逻辑或(||)和逻辑非(!)。在不少常见任务中,布尔操做对于检验要求输入的字符串很是有用。

function validate(){
    var name_input = 'java';
    var age_input;
    return name_input && age_input;
}
if(validate()){
    console.log('pass');
} else {
    console.log('fail');
}
//输出 fail

NaN值表示一个非数值的值,但你若是输入下面的代码,结果将会很奇怪:

> typeof NaN;
"number"

这是typeof操做符奇怪的行为之一。

五、类型比较

JavaScript具备等于(==)操做符和等同(===)操做符。==操做符是危险的,由于它在执行比较以前,强制执行类型转换。例如:

> 1 == '1';
true

显然,这不是咱们想要的比较结果。若是左操做数和右操做数真正彻底相同,===操做符才会返回true。

> 1 === '1';
false

对应的还有!=和!==操做符,请老是使用===和!==操做符。

六、日期(Data)

JavaScript内置了Date对象,可使用new操做符和Date()构造函数来建立Date对象,Date对象用于表示日期和时间。不带任何参数建立一个新的Date对象,得到的是一个表示当前日期和时间的Date对象。

> var thisMoment = new Date();
> console.log(thisMoment);
Date {Sun Aug 30 2015 10:47:14 GMT+0800}
> thisMoment.getFullYear();
2015

虽然Date是一个方便的对象,了解该对象固然仍是有用的。强烈建议使用开源的Date.js库来执行日期/时间的计算,能够从https://github.com/datejs/Datejs找到该js库,datajs官方网站如今已经没法打开,返回503状态。

七、其余类型

声明一个变量时未对其赋值,或者访问了一个不存在的对象属性,结果都会产生一个称为undefined的类型。null时JavaScript的一个内置对象,它表示没有值。在执行比较操做时,undefined和null两者都被装换成false值,可是最好避免使用undefined。在不少JavaScript解析器中,undefined是能够从新赋值的,于是可能会产生存在弊病的代码:

undefined = true;
if(undefined){
    console.log('骗你!');
}
//输出:骗你!

下面列出了JavaScript支持的各类数据类型。正则表达式,或称为RegEx不在这里介绍。

  • Number

  • String

  • Boolean

  • Object

  • Function

  • Array

  • Date

  • RegEx

  • Null

  • Undefined

在使用try/catch语句时,某些附加的内置error类型是很是有用的。一般在throw语句中建立error对象。

try{
    throw new Error('很是糟糕的事情发生了!');
}catch(e){
    console.log(e.name + ':' + e.message);
}
//输出:Error:很是糟糕的事情发生了!

下面的列表列出了各类不一样的error类型

  • Error

  • EvalError

  • RangError

  • ReferenceError

  • SyntaxError

  • TypeError

  • URIError

对于我来讲,最多见的莫过于SyntaxError这个经典的语法错误,太熟悉了。

相关文章
相关标签/搜索