JavaScript之数据类型

javasscript有5种简单数据类型(也成为基本数据类型):

Undefined、Null、Boolean、Number、String

1种复杂数据类型:

Object

在javascript中所有值的数据类型就是上述6种之一了。那么我们需要一个方法来检测给定变量到底是那种数据类型,typeof操作符就可以帮助我们解决问题。

var msg="博客园";
alert(typeof msg);  // "string"
alert(typeof 110);  //  "number"

 

使用typeof 操作符,返回下列某个字符串:

"undefined" --该值未定义

"boolean"--布尔值

"string"--字符串

"number"--数值

"object"--对象或null

"function"--函数

看到这里我们对"object"--对象或null有些疑惑,为什么 typeof null 会返回object,这里我们需要记住的是null是一个特殊类型,他表示对一个空对象的引用,所以会返回object。

华丽的分割线 ----------------------------------------------------------------------------------------------------------------------------------------------------------------

1.Undefined类型

当我们声明一个变量时没有对其进行初始化,这个变量的值就是undefined:

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

例子中声明变量msg,并没有对其进行初始化,所以会弹出undefined。

所以声明变量时我们也可以使用undefined来初始化变量:var msg=undefined,

但是未经初始化的值会默认取得undefined,这种写法也没必要了。

var msg; // 声明变量,默认取得undefined
// 变量name没有声明
// var name 

alert(msg); // "undefined"
alert(name); // 产生错误

上述代码name变量并没有被声明,传递给alert函数时产生一个错误。

这时我们用typeof检测一下我们的变量:

var msg; // 声明变量,默认取得undefined
// 变量name没有声明
// var name 

alert(typeof msg); // "undefined"
alert(typeof name); // "undefined"

结果是未初始化和未声明的变量执行typeof都返回了undefined,这个结果有其逻辑上的合理性。因为虽然这两种变量从技术上角度看有本质区别。

即便未初始化的变量会自动赋予undefined值,但养成显式初始化变量(即在声明变量的同时给变量赋值)的习惯。如果能够做到这一点,那么当typeof操作符返回undefined

时,我们就知道被检测的变量是有还是没有被声明的,而不是尚未初始化的了。

2.Null类型

前面说过null是一个特殊的类型,表示对一个空对象的引用。

但是undefined和null之间有什么关系呢?看下面的代码:

alert(null==undefined); // true

实际上,undefined值派生自null值,因此ECMA-262规定它们的相等测试要返回teue。

尽管有这样的关系,但他们的用途完全不同。前面也说过声明变量没有必要显示的初始化为undefined,会默认取得。对于null却不能这样了,也就是说声明一个变量来保存对象,只要

变量还没有保存,就应该让变量明确保存null值。这样既能体现null作为空对象指针的特性,又能区分null和undefined。

3.boolean类型

boolean类型只有两个值:true和false。这两个值与数值值不是一回事,因此true不一定等于1,false也不一定等于0。

boolean类型的字面值true和false是区分大小写的。像True和False都不是boolean值,而是标识符。

虽然boolean类型的值只有两个,但是其他类型的值都有与这两个boolean值等价的值。将一个值转换为其对应的boolean值,需要调用Boolean()函数。

var msg="博客园";
alert(Boolean(msg)); // true

在上述代码中字符串msg被转换成了一个boolean值。可以对任何数据类型的值调用Boolean()函数,而且总会返回一个boolean值。这个值是true还是false取决于被转换数值的数据类型和具体的值。

看如下各数据类型及对应的转换规则:

                   数据类型                           转换为true的值                                 转换为false的值

                boolean                                     true                                                                  false          

                    string                                        非空字符串                                                         ""空字符串  

                    number                                     非零数值                                                            0 和 NaN    

                    objeact                                     任何对象                                                             null            

                    undefined                                 ----不适用                                                           undefined 

通过这些转换规则,可以帮我们很好的理解控制流语句if自动执行相应的Boolean转换:

var msg="博客园";
if(msg)
{
    alert("变量msg被转换为true");
}

运行上述代码,就会显示一个警告框。字符串msg被自动的转换为对应的Boolean值。明白这个原理,我们就能很好的在控制语句if中使用变量了。

4.number类型

3.1整数,最常用的就是十进制整数了。当然还有八进制、十六进制,这里不做讲解了。

需要注意的是在做算术计算时,所有以八进制和十六进制表示的数值最终都会被转换成十进制数值。

3.2浮点数值,就是该数值中必须包含一个小数点,小数点后面必须有一位数字。

var num1=1.1;
var num2=1.2;
var num3=.3;  // 有效,但不推荐

由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会自动把相应的浮点数值转换为整数值。如果小数点后面没有跟数值(2.)或者后面跟了一个零(2.0),

这个值就会被作为整数值来保存:

var num1=2.;
alert(num1);  // 2,小数点后没有数值解析为2

var num2=2.0;
alert(num2);  // 2,本身就是一个整数解析为2

对于那些极大或者极小的数值,可以用e表示法(科学计数法)来表示浮点数值。

科学计数法的格式:整数/浮点数 + e/E + 10的幂中的指数

                             3.125           e            7  == 

var num1=3.125e7;  // 31250000

3.3数值范围,由于内存的限制,并不能保存所有的数值。

能表示的最小值:Number.MIN_VALUE,这个值是5e-324

能表示的最大值:Number.MAX_VALUE,这个值是1.7976931348623157e+308

如果你的某次计算得到的值不在javascript最小和最大值这个范围内,那么你的值会被自动转换成特殊的Infinity值。

如果这个值是负数,会转换成-Infinity(负无穷);如果是正数,则是转成Infinity(正无穷)。

3.4 NaN:非数值。有两个特点:

一、任何涉及NaN的操作都会返回NaN(例如NaN/5).

二、NaN与任何值都不相等,包括本身。

alert(NaN==NaN); // false

针对NaN的这两个特点,javascript定义了isNaN()函数。这个函数接收一个参数,该参数可以是任何类型,函数会帮我们确定这个参数是否“不是数值”。

isNaN()在收到一个值后,会尝试将这个值转换为数值,某些不是数值的值会直接转换为数值,(字符串“10”或Boolean),任何不能被转换的都会返回true

alert(isNaN(NaN)); // true
alert(isNaN(10)); // false 10是数值
alert(isNaN("10")); // false "10"可以被转换为数值10
alert(isNaN("博客园")); // true 不能转换为数值
alert(isNaN(false)); // false 可以被转换为0

5.String类型

字符串是 JavaScript 的一种基本的数据类型。

String 对象的 length 属性声明了该字符串中的字符数。

String 类定义了大量操作字符串的方法,例如从字符串中提取字符或子串,或者检索字符或子串。

6.object类型


一组数据和功能的集合,对象可以通过new操作符来创建对象。

var obj=new Object();

可以自定义对象的属性或方法:

var obj=new Object();
obj.name="张三";
obj.say=function(){
    alert(this.name)
}

还可以这么写:

var obj={
    name:"张三",
    say:function(){
        alert(this.name)
    }
}

结果是一样的。

在javascript中object是所有对象的基础,因此所有的对象都具有object的属性和方法。

posted @ 2014-12-22 09:02  幸福就好  阅读(648)  评论(0编辑  收藏  举报