javascript的基础数据类型

来源:互联网 发布:数据库中索引是什么 编辑:程序博客网 时间:2024/05/18 00:40

Javascript数据类型:

基本数据类型(传值): String, Number, Boolean, Null, Undefined

复合数据类型(传引用):Object

1. 在Javascript中只会有上面的6中数据类型

需要强调的是,在Javascript中:

var n1= '123'; 

var n2 = new String('123');

typeof n1;    //string

typeof n2;    //object


因此上面两个看似有关,但是其实他们没有关系,具体来说,String是在Object上继承而来的,作为Object的子类存在:

n2.__proto__.constructor == String

n2.__proto__.__proto__.constructor == Object


2. Javascript用typeof来检测其数据类型

typeof用来检测值类型的数据的数据类型,只有可能是下面其中之一:undefined、boolean、stringnumberobject、function

undefined: 为声明或初始化的变量

     对于其中为声明的理解: alert(age)//预编译错误, alert(typeof age): undefined

null: 空对象指针

    var car = null; typeof car: object

结论:
(1)对于一个已声明却未初始化变量,则该值为undefined;对于一个尚未声明的变量,只能执行一项操作,即使用typeof 来检测其数据类型,并且一定是undefined.
(2)即使未初始化的变量会被自动赋予undefined值,但是显式的初始化变量依然是很明智的选择。如果能做到这一点,那个当typeof操作符返回undefined值时候,我们就知道被检测的变量还没有被声明,而不是尚未初始化。
(3)如果这个值是为了保存对象,则使其默认初始化的值为null。 所以当检测其类型时,会显示类型为object(*这就是JS基本数据类型时往往会忽略null的原因,因为其不是值类型)
(4)从技术角度上讲,函数在ECMAScript种是对象,来自于Function的实现,而不是一种数据类型,因此要辩证的看待上面用来检测Javascript数据类型的typeof操作符却能得到function(function并不是Javascript的数据类型)这一个事实;换句话说,函数确实有一些特殊的属性,因此通过typeof操作符来区分函数和其他对象是有必要的。


3. 对于复合类型的数据,可以用instanceof来检测一个复合变量的类型等,具体关于instanceof 和typeof 的用法请看原型链中的说明。


4. 基本类型和复合类型的本质上的区别是其在内存中的存放关系是不一样的

基本类型的数据存放在栈,而复合类型则堆中

栈是一种先进后出,向下生长的内存结构,其栈底实在内存中的顶部,指针位置被存在一张表中,指针向下移动则表示入栈(push),向上则表示出栈(pop),堆栈之间有一块区域是公共设备映射区,下面则是堆,堆则是向上生长,但凡是new过的变量,其实质的值都存在堆里面,变量只是存放了堆中真是值所对应的位置信息

0 0