首页 > 编程 > JavaScript > 正文

JavaScript 数据类型(值类型/引用类型)

2019-11-06 07:27:43
字体:
来源:转载
供稿:网友

1. 简单数据类型(值类型)String  Number  Boolean  undefined null数据存储在中2. 复杂数据类型(引用类型)Object  function  Array  Date  RegExp  Error ...先在栈空间中开辟一块内存,将数据保存到堆空间中,然后将数据在栈空间中的存储地址放到栈空间中3.值类型 和 引用类型(1)js类型:-> 简单类型:字符串 string,数字 number,布尔 boolean-> 复杂类型(复合类型):由简单类型组合而来 -- 对象 object,函数 function-> 空类型:null,undefined(2)特点:-> 简单类型的特点就是变量本身存储的就是值本身-> 复杂类型的特点就是变量不存储数据,数据由于非常的庞大,存储在单独的内存中,变量只存地址(引用)值类型好比文件,文件拷贝一份,其内容也会被拷贝一份;引用类型就好比快捷方式,数据存储在文件夹的各文件中,快捷方式拷贝一份,数据并没有被拷贝,两个快捷方式指向的是同一份数据。由此可以解释以下二者的关系:new Person().__PRoto__Person.prototype从不同的角度找到同一个对象,从实例和构造函数都能找到原型。(3)函数参数传递时值类型与引用类型的特征:例1的过程:① 执行的第一句话就是给n1赋值123,所谓的赋值就是有一个容器,可以放置123这个数字;② 第二句话调用函数    -> 将参数传入(将变量中的数据拷贝一份)    -> 跳转到函数体中(将拷贝的数据完成一次赋值,赋值给形参)    -> 执行函数体中的代码    -> 函数结束回到原来的函数调用的地方    -> 继续执行后面的代码
//例1:值类型作为参数function foo(num){//这里的num在进来的时候就是123    num *= 2;//246}var n1 = 123;foo(n1); //传参数时会将n1拷贝一份,即内存中有两个123,将拷贝的123传入到函数中赋值console.log(n1);//123结论1: 值类型在参数传递中,函数内与函数外是两个不同的变量,只是数据值相同而已,修改其中一个,另一个不影响
//例2:引用类型作为参数function seeDoctor(per){//进入函数体前,拿到传入的数据,即地址    per.health = '健康';}var p = {    name:'jim',    health:'感冒'};//有两个内存区域,一个存储数据,一个存储p(即地址)seeDoctor(p);//传递参数时p会被拷贝一份,拷贝的是地址,数据没有被拷贝console.log(p.health);//健康//使用p找内存中的数据//得到的就是'健康'结论2: 引用类型在参数传递中,函数内与函数外是两个不同的变量,但是指向同一个对象,因此使用函数内的变量,去修改对象的数据,函数结束后,修改的结果会保留下来
//例3:特例function seeDoctor(per){    per = {        name:'tom',        health:'健康'    };}var p = {    name:'tom',    health:'感冒'};seeDoctor(p);console.log(p.health);//感冒结论3:引用类型如果直接赋值,就和值类型一样4. 字面量固定的值,让你从“字面上”理解其含义。var age=18; // 数值字面量,18为字面值5. 因为精度丢失问题,所以不判断计算后的两个浮点数是否相等    6. 数值范围

由于内存的限制,ECMAScript 并不能保存世界上所有的数值

最小值:Number.MIN_VALUE,这个值为: 5e-324

最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308

无穷大:Infinity

无穷小:-Infinity

7. NaN

a) NaN 非数值(Not a Number的简写)

console.log(“abc”/18);  //结果是NaN

Undefined和任何数值计算为NaN;

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

b) isNaN() :任何不能被转换为数值的值都会导致这个函数返回 true

(isNaN译为是否符合一个标准,什么标准呢?不是一个数字的标准,如果符合了那么就不是一个数字,不符合就是一个数字)

isNaN(NaN);// true

isNaN(“blue”); // true

isNaN(123); // false

8. 转义符://t:制表符,四个空格/n:换行9. 字符串的不可变性在内存中不会立刻消失,只能二次赋值,原有的字符在一定时间内被垃圾回收器回收。   10. undefined 和 nullnull和undefined有最大的相似性。看看null == undefined的结果(true)也就更加能说明这点。但是null ===undefined的结果(false)。不过相似归相似,还是有区别的,就是和数字运算时,10 + null结果为:10;10 + undefined结果为:NaN。任何数据类型和undefined运算都是NaN;任何值和null运算,null可看做0运算。    11. BoobleanBoolean类型有两个字面量:true和false,区分大小写。(大写不对)虽然Boolean 类型的字面值只有两个,但 ECMAScript 中所有类型的值都有与这两个Boolean 值等价的值true、除0数字、“something”、Object(任何对象)为truefalse、0 、“”、undefined 、null为falseif判断时会把括号内的值强行转换成boolean类型。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表