js数据类型详解

一、js数据类型分类

  (1)原始数据类型(值类型)

    null  空类型,变量声明了并赋值为null。转化为数字是0

    undefined  未定义,变量声明了但未赋值。转化为数字为NaN

    boolean  布尔类型

    string    字符串

    number  数值

  (2)对象数据类型(引用类型)

    Object  Array  Date Function RegExp

    特殊引用类型:String Boolean Number (包装类型)

  (3)装箱和拆箱

  问题:字符串是值类型,为什么还可以使用方法

  原因:js代码执行分2个过程:预解析,执行。

  基本包装类型:本身是基本类型,但在代码的执行过程中,调用了属性或方法,JS解析引擎会自动对其进行包装,此时这个变量就是基本包装类型的对象。  

//装箱
var
name = "xiaoming";    //先变量提升,声明name变量:在栈区分配一块空间,name指向这个地址。再执行代码,name变量赋值,遇到“”,判断为字符串类型。xiaoming存储在分配的栈区中 console.log(name.toString);  //遇到toString方法,JS解析引擎创建name的对象(即String对象),调用其方法,这行代码执行结束,销毁String对象。
//拆箱
var
num =new Number("123");
console.log(num);  //Number{},num是一个对象 console.log(num
-1);  //122,是一个整数。在做减法运算时,系统自动调用了num.valueOf方法,返回对象的原始值

 

二、js数据在内存的存储位置

  不同的编程语言,其变量的存储形式不同:js是解释性脚本语言,变量存在栈区和堆区

    栈区:存储值类型数据(原始数据类型)

      特点:1. 存储的值大小固定,不可更改里面的数据。

         2. 空间较小,有限制,超过则报stack overflow

         3. 可以直接操作其保存的变量值,运行效率高

         4. 由系统自动分配存储空间。在声明变量时就分配好了内存空间  

    此类数据变量名指向的地址中存储的就是数据

var name = "aa";
name += "bb";  //重新分配了一块空间存储aabb,并将name指向新值。(并没有改变原来name空间的值)

    堆区:存储引用类型数据(对象)

      特点:1. 存储的值大小不定,可动态调整

         2. 空间较大,运行效率低

         3. 无法直接操作其内部存储,使用引用地址读取

         4. 通过代码进行分配空间(代码执行到创建对象位置)

    此类数据变量名指向的地址中存储的还是一个地址

C语言变量在内存里面的存储:
1.栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。
2.堆区(heap) — 一般由程序员分配释放, 用来存储数组,结构体,对象等。若程序员不释放,程序结束时可能由OS回收。
3.全局区(静态区)(static)— 存放全局变量、静态数据、常量。程序结束后由系统释放。
4.文字常量区 — 常量字符串就是放在这里的。 程序结束后由系统释放。
5.程序代码区 — 存放函数体(类成员函数和全局函数)的二进制代码。

三、JS中参数传递

  js中参数传递全部为值传递

四、JS数据类型转换

  1. 自动转化规则:(隐式转化)

  

   

posted on 2019-12-02 13:48  反射弧  阅读(515)  评论(0编辑  收藏  举报

导航