资讯专栏INFORMATION COLUMN

JavaScript中的数据类型回顾

ralap / 2976人阅读

摘要:一门语言可以使用的值的类型,称为该语言的数据类型。中没有为字符串定义特殊的数据类型。布尔类型表示值和值。输出支持的布尔操作包括逻辑与逻辑或和逻辑非。在很多常见任务中,布尔操作对于检验要求输入的字符串非常有用。

1、标识符(Names)

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

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不逊雨在对象字面量中,或者用点运算符提取对象属性时,使用保留字作为对象的属性名。

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

2、数值(Numbers)

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

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

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

> .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值。

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

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

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

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

充分利用内置对象可以节省时间、提高效率。

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对象以满足开发人员的需要。

4、布尔(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操作符奇怪的行为之一。

5、类型比较

JavaScript具有等于(==)操作符和等同(===)操作符。==操作符是危险的,因为它在执行比较之前,强制执行类型转换。例如:

> 1 == "1";
true

显然,这不是我们想要的比较结果。如果左操作数和右操作数真正完全相同,===操作符才会返回true。

> 1 === "1";
false

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

6、日期(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状态。

7、其他类型

声明一个变量时未对其赋值,或者访问了一个不存在的对象属性,结果都会产生一个称为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这个经典的语法错误,太熟悉了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/86288.html

相关文章

  • JavaScript中的数据类型回顾

    摘要:一门语言可以使用的值的类型,称为该语言的数据类型。中没有为字符串定义特殊的数据类型。布尔类型表示值和值。输出支持的布尔操作包括逻辑与逻辑或和逻辑非。在很多常见任务中,布尔操作对于检验要求输入的字符串非常有用。 1、标识符(Names) 标识符由一个字母、下划线和美元符开头,其后可以选择性的加上一个或多个字母、数字或下划线。标识符不能使用下面这些保留字: abstract boolean...

    ideaa 评论0 收藏0
  • JavaScript回顾学习:数据类型

    摘要:本篇文章将回顾学习种基本类型和及数据类型之间的转化。如果不能,再调用对象的方法,再测试返回值是否可以被转化为数值。首先可以用于任何数据类型,另外两个则是专门用于把字符串转换成数值。 概述 ECMAScript中有5中基本数据类型:Undefined,Null,Boolean,Number,String,还有一种复杂数据类型对象(Object),Object本质上是由一组无序的名值对组成...

    youkede 评论0 收藏0
  • 基础回顾javascript数据类型

    摘要:栈区由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。属性返回对创建此对象的构造函数的引用。所有的和都是宿主对象参考高级程序设计堆和栈的概念和区别全面解析中的数据类型与类型转换 数据类型 数据类型划分 javascript中定义了6中基本数据类型(原始值类型),和一种复杂数据类型(引用类型),所谓复杂类型,其本质是由无序的名值对(key:val...

    codergarden 评论0 收藏0
  • 重新回顾JavaScript的数值类型

    摘要:中有两中数值类型基本数值类型和对象类型引用数据类型基本数据类型新增对象类型可变与不可变基本上数据类型是不可变的,我们不能给他添加属性,即使添加了属性也是无效的。基本上数据类型比较很简单,常规思维可以理解基本数据类型对比,没毛病,很好理解。 JavaScript中有两中数值类型:基本数值类型和对象类型(引用数据类型) 基本数据类型: Boolean undefined Null ...

    cncoder 评论0 收藏0
  • 前端面试回顾(1)---javascript的面向对象

    摘要:每个类有三部分构成第一部分是构造函数内,供实例对象化复制用。第二部分是构造函数外,直接通过点语法添加,供类使用,实例化对象访问不到。组合继承还有一个要注意的地方在代码处,将子类原型的属性指向子类的构造函数。 前言 前一阵面试,过程中发现问到一些很基础的问题时候,自己并不能很流畅的回答出来。或者遇到一些基础知识的应用,由于对这些点理解的不是很深入,拿着笔居然什么都写不出来,于是有了回顾一...

    animabear 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<