快捷搜索:  汽车  科技

javascript数据类型归纳:看这一篇就够了

javascript数据类型归纳:看这一篇就够了alert(null == undefined); //true但是两者还是有区别的,如果一个变量暂时不赋值,将来要使用。我们不会把一个变量显示的定义为undefined,而是会定义为null。var car = null; alert(typeof car); //object实际上undefined值是派生自null值得,如下例:var message = "some string"; alert(typeof message); // "string" alert(typeof (message)); // "string" alert(typeof 95); // "number"2 Undefined类型Undefined类型只有一个值,级特殊的undefined。在使用var声明变量,但未对其加以初始化时,这

数据类型

ECMAScript中有5中简单的数据类型(也成为基本数据类型):Undefined、Null、Boolean、Number、String。还有一种复杂的数据类型——Object

注:Object本质上是有一组无序的键值对组成的

1 typeof操作符

鉴于ECMAScript是松散类型的,因此需要一个手段来检测给定的变量时什么类型,typeof就是负责这个功能的操作符。对一个值使用typeof操作符可能返回下列某个字符串:

  • "undefined"——如果这个值未定义
  • "boolean"——如果这个值是布尔值
  • "string"——如果这个值是字符串
  • "number"——如果这个值是数值
  • "object"——如果这个值是对象或null
  • "function"——如果这个值是函数

下面举一些使用typeof操作符的例子:

var message = "some string"; alert(typeof message); // "string" alert(typeof (message)); // "string" alert(typeof 95); // "number"2 Undefined类型

Undefined类型只有一个值,级特殊的undefined。在使用var声明变量,但未对其加以初始化时,这个变量就是undefined,例如:

var message; alert(message == undefined); // true

也可以将变量直接初始化为undefined:

var message = undefined; alert(message == undefined); // true3 Null类型

Null类型是第二个只有一个值得数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空**对象**指针,这也正是为什么用typeof检测null值会返回object的原因:

var car = null; alert(typeof car); //object

实际上undefined值是派生自null值得,如下例:

alert(null == undefined); //true

但是两者还是有区别的,如果一个变量暂时不赋值,将来要使用。我们不会把一个变量显示的定义为undefined,而是会定义为null。

4 Boolean类型

Boolean类型是ECMAScript中使用得最多的一种类型,该类型有两个字面值:true和false。

var found = true; var lost = false;

虽然Boolean类型的字面值只有两个,但ECMAScript中所有类型的值都有与这两个Boolean值等价的值。也就是说能够定义的所有值要么能转成true,要么能转成false,可以用转型函数Boolean()转化。

var message = "Hello world"; var messageAsBoolean = Boolean(message); alert(messageAsBoolean); //true

下表给出了各种数据类型及其对应的转换规则:

javascript数据类型归纳:看这一篇就够了(1)

注:n/a(或N/A),是not applicable的缩写,意思是“不适用”。


在流程控制语句中,会自动执行Boolean转换,如下所示:

var message = "Hello world!"; if (message) { //这里执行了Boolean转换,将message转为true alert("Value is true"); }5 Number类型

Number类型应该是ECMAScript中最令人关注的数据类型了,直接上例子:

var intNum = 55; // 十进制的55 var octalNum = 070; // 八进制的56 var hexNum = 0xA; // 十六进制的10

1.浮点数值

所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有以为数字,浮点数值的例子:

var floatNum1 = 1.1; var floatNum2 = 0.1; var floatNum3 = .1; //有效,但不推荐

由于浮点数值占用的内存是整数值的两倍,所以ECMAScript会不失时机地将浮点数值转换为整数值,如下所示:

var floatNum1 = 1.; //小数后面没有数字——解析为1 var floatNum2 = 10.0; //整数——解析为10

还有一种可以表示极大或极小的浮点数值的方法——e表示法,如下所示:

var floatNum = 3.125e7;

其含义是3.125*10^7

var floatNum = 3e-7;

其含义是3*10^(-7)

2.数值范围

由于内存的限制,ECMAScript并不能保存世界上所有的数值。ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中,这个数值是5e-324;能够表示的最大数值保存在Number.MAX_VALUE中,这个数值是1.7976931348623157e 308。如果某次计算的结果超过这个范围,则会被转换成特殊的Infinity值。

var result = Number.MAX_VALUE Number.MAX_VALUE; alert(isFinite(result)); //false

3.NaN

NaN,即非数值(Not a Number),这个数值用于表示一个本来要返回数值的操作数未返回数值的情况,当计算错误的时候,不会抛出错误,而是返回一个NaN,这样就不会影响后面代码的执行。

  • 任何涉及NaN的操作(例如NaN/10)都会返回NaN
  • NaN与任何值都不相等,包括NaN本身

alert(NaN == NaN); //false alert(isNaN(NaN)); //true

4.数值转换

有3个函数可以把非数值转换为数值:Number()、parseInt()、parseFloat()

  • Number()——可以用于任何数值类型
  • parseInt()——用于字符串转数值
  • parseFloat()——用于字符串转数值

Number()函数的转换规则如下:

  • 如果是Boolean值,true和false将分别被转换为1和0
  • 如果是数字值,只是简单的传入和返回
  • 如果是null值,返回0
  • 如果是undefined,返回NaN
  • 如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回值
  • 如果是字符串,遵循以下规则:
    • 如果字符串中包含数字,则将其转换为十进制数值
    • 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值
    • 如果字符串中包含有效的十六进制格式,如"0xf",则将其转换为相同大小的十进制整数值
    • 如果字符串是空的,则将其转换为0
    • 如果字符串中包含除上述格式之外的字符,则将其转换为NaN

例如:

var num1 = Number("Hello world!"); //NaN var num2 = Number(""); //0 var num3 = Number("000011"); //11 var num4 = Number(true); //1

由于Number()在转换字符串时比较复杂而且不够合理,因此更常用的是parseInt()函数。parseInt()会从字符串第一个非空格字符开始扫描,如果第一个字符不是数字符号或者负号,parseInt()就会返回NaN。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,知道遇到一个非数字字符。例如,"1234blue"会被转换为1234。"22.5"会被解析成22。

var num1 = parseInt("1234blue"); // 1234 var num2 = parseInt(""); // NaN var num3 = parseInt("0xA"); // 10(十六进制数) var num4 = parseInt(22.5); // 22 var num5 = parseInt("070"); // 56(八进制数) var num6 = parseInt("70"); // 70(十进制数) var num7 = parseInt("0xf"); // 15(十六进制数) var num8 = parseInt("f" 16); // 15(十六进制数,另一种写法,推荐这么写)

parseFloat()与parseInt()类似,但有两点区别:

  • parseFloat()解析字符串中的第一个小数点是有效的,而第二个小数点无效
  • parseFloat()始终会忽略前导的零
  • 十六进制的字符串始终会被转换成0
  • 如果字符串可以解析为整数,那么parseFloat()会返回整数

var num1 = parseFloat("1234blue"); // 1234(整数) var num2 = parseFloat("0xA"); // 0 var num3 = parseFloat("22.5"); // 22.5 var num4 = parseFloat("22.34.5"); // 22.34 var num5 = parseFloat("0908.5"); // 908.5 var num6 = parseFloat("3.125e7"); // 312500006 String类型

String类型用于表示有零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以用双引号(")或单引号(')表示,因此下面的写法都是有效的:

var firstName = "Kobe"; var lastName = 'Bryant';

1.字符字面量

String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。这些字符字面量如下表所示:

javascript数据类型归纳:看这一篇就够了(2)

2.字符串的特点

ECMAScript中的字符串是**不可变**的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符,首先要销毁原来的字符串,然后在用另一个包含新值得字符串填充该变量,例如:

var lang = "Java"; lang = lang "Script";

第二行的动作是,创建一个能容纳10个字符的新字符串,然后在这个字符串中填充"Java"和"Script",然后将原来的字符串"Java"和字符串"Script"销毁。

3.转换为字符串

要把一个值转换为一个字符串有两种方式。

a. toString()方法,该方法返回字符串的一个副本

var age = 11; var ageAsString = age.toString(); // 字符串"11" var found = true; var foundAsString = found.toString(); // 字符串"true"

由于null和undefined值没有toString()方法,可以用下面的String()方法转换为字符串

b.String()方法,可以将任何类型的值转换为字符串。

  • 如果值有toString()方法,则电泳该方法并返回相应的结果
  • 如果值是null,则返回"null"
  • 如果值是undefined,则返回"undefined"

下面看几个例子:

var value1 = 10; var value2 = true; var value3 = null; var value4; alert(String(value1)); // "10" alert(String(value2)); // "true" alert(String(value3)); // "null" alert(String(value4)); // "undefined"7 Object类型

ECMAScript中的对象其实就是一组数据和功能的集合。Object对象创建的方法如下:

var o = new Object();

Object的每个实例具有如下属性和方法:

  • constructor:保存着用于创建当前对象的函数。对于前面的例子而言,构造函数就是Object()
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象中是否存在
  • isPrototypeOf(object):用于检查传入的对象是否是当前对象的原型
  • propertyIsEnumerablepropertyName():用于检查给定的属性能否能用for-in语句来枚举
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应
  • toString():返回对象的字符串表示
  • valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同


如果这篇博客对你有用,点个赞再走呗~

猜您喜欢: