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


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 和 null
null undefined 有最大的相似性。看看 null == undefined 的结果 (true) 也就更加能说明这点。但是 null ===undefined 的结果 (false) 。不过相似归相似,还是有区别的,就是和数字运算时, 10 + null 结果为: 10 10 + undefined 结果为: NaN
任何数据类型和 undefined 运算都是 NaN;
任何值和 null 运算, null 可看做 0 运算。    


11. Booblean
Boolean 类型有两个字面量: true false ,区分大小写。(大写不对)
虽然 Boolean  类型的字面值只有两个,但  ECMAScript  中所有类型的值都有与这两个 Boolean  值等价的值

true 、除 0 数字、“ something ”、 Object( 任何对象 ) true

false 、“”、 undefined  null false

if判断时会把括号内的值强行转换成 boolean 类型。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值