码迷,mamicode.com
首页 > 其他好文 > 详细

数据类型概述

时间:2015-04-27 14:44:28      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:

在JavaScript中的每一个值都属于一种数据类型,JavaScript的数据类型分6种。这6种数据类型又分成两类:  原始类型(primitive type)  和  对象类型(object type)  原始类型包括3种数据类型:  

数值(Number)
布尔(Boolean)
字符串(String)

  对象类型包括3种数据类型:  

对象(Object)
数组(Array)
函数(Function)

除了以上的6种数据类型,JavaScript还额外定义了两个特殊的原始值: null(空) 和 undefined(未定义) ,它们不是数值、字符串和布尔值,它们通常代表各自特殊类型的唯一成员。   普通的JavaScript对象是“命名值”的无序集合。但是数组和函数也是特殊的的对象: 数组是一种带编号的值的有序集合对象 函数是具有与它相关联的可执行代码的对象   使用 typeof() 方法判断一个值属于什么类型:  

1 typeof 123 //"number"
2 typeof "123" //"string"
3 typeof true //"boolean"

除了三种基本类型,使用typeof()方法测试,函数将会返回”Function”,undefined将会返回 undefined :  

1 var F = function(){}
2 typeof F // "function"
3 typeof undefined // "undefined"

通过这一特性,我们可以在程序中检查变量是否有被定义:    

if(typeof o == "undefined"){
  //ReferenceError: o is not defined
}

除了以上的5中返回类型之外,其他所有的数据类型都会返回 object :   

1 typeof null;  //"object"
2 typeof {};  //"object"
3 typeof [];  //"object"

为了能够显示的区分对象和数组,我们需要用到另外一个运算符 instanceof :    

1 var o = {}
2 o instanceof Object;  //true
3 o instanceof Array;  //false
4 var a = []
5 a instanceof Object; //false
6 a instanceof Array;  //true

 null 和 undefined 同样是描述“空值”,但是可以将undefined理解成更加深层次的“空值”。null通常表示变量已经被定义,但是没有赋予初始值,实际上很多情况下确实是这样定义变量的:  

var str = null;  //表示先定义一个空的变量str,供后面的程序使用

  Javascript中的包装对象 在Javascript中,对象是一种复合值,是属性和已经命名的值得集合。通过”.”符号来引用属性值和方法,但是我们看到字符串也有同样的属性和方法:  

var s = "hello world";
var word = s.substring(s.indexOf(" ")+1,s.length);  //使用字符串的属性

实际上只要引用了字符串s的属性,JavaScript就会将字符串通过调用 new String(s) 的方式转换成对象,这个对象继承了字符串的方法,并被用来处理属性和引用。一旦属性引用结束,这个新创建的对象就会被销毁。   同字符串一样,数组和布尔值都有各自的方法:通过 Number() 和 Boolean() 构造函数来创建一个临时对象。null和undefined没有临时包装对象,访问他们的属性会返回一个类型错误。  

var s = "test";
s.len = 4;
var t = len;

当运行上面代码的时候t的值会返回undefined,因为第二行定义的变量len会在定义之后随即销毁。这段代码说明在读取字符串、数字和布尔值的属性时,表现得会和一般对象一样。但是尝试为其赋值的时候则会被忽略。   存取字符串、数字或布尔值的属性时创建的临时对象称作包装对象,和普通对象最明显的区别是包装对象的属性都是只读的。 同样也可以通过构造函数显式地创建包装对象:  

var s = "test",n = 1,b=true;  //一个字符串、数字和布尔值
var S = new String(s);  //一个字符串对象
var N = new Number(n);  //一个数值对象
var B = new Boolean(b); //一个布尔对象

使用”==”来检测s,n,b和S,N,B的时候将会返回true,通过 typeof() 运算符可以看到原始值和其包装对象的不同。   在JavaScript中原始值和对象有着根本的区别,原始值是不可更改的。对字符串而言,使用字符串的方法看似改变了其值,实际上返回的是一个新的字符串。例如:  

var s = "hello";  //定义一个由小写字母组成的字符串
s.toUpperCase();  //返回“HELLO”,但并没有改变s的值
s;  //"hello",原始值并未改变

原始值的比较只有他们的值相等的时候才相等,例如两个单独的字符串比较,只有当他们的长度相等且每个索引的字符相等的时候才相等。而对于对象而言,即使两个对象包含相同的属性和相同的值,他们也是不相等的。各个索引元素完全相等的数组也不相等。 

var o = {x:1}, p = {x:1};
o === p; //false
var a = [],b=[];
a === b; //false

对象的比较都是引用的比较,只有当他们引用同一个对象的时候他们才相等:

var a = [];
var b = a;
b[0] = 1;
a[0]; //1
a === b; //true

想要得到一个对象或数组的副本,必须显式地复制每一条属性或元素: 

var a = ["a","b","c"];
var b = [];
for(var i=0;i<a.length;i++){
    b[i] = a[i]
}

同样的,如果想比较两个单独的对象或数组,则必须显式地比较他们的每一条属性或元素:

function equalArrays(a,b){
    if(a.length != b.length) return false; //长度不等的数组不相等
    for(var i=0;i < a.length;i++){
        if(a[i] != b[i]) return false; //任意元素不相等则不相等
    }
    return true;
}

 

数据类型概述

标签:

原文地址:http://www.cnblogs.com/suliang1100/p/4459845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!