JavaScript中的数据类型回忆

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这个典范的语法毛病,太熟习了。

    原文作者:dunizb
    原文地址: https://segmentfault.com/a/1190000004680401
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞