js基本数据类型和引用类型的区别详解-笔记
原文参考http://mp.weixin.qq.com/s/apFyUgqT5N-bsDUjP4Eryg
笔记总结
首先记住js中的基础数据类型
undefined,null,boolean,string,number
1基本数据类型
一基本数据类型的值是不可变的
var name = 'hello';
name.substr(2);// 此处sunstr方法返回新的字符串
console.log(name);// ‘hello’
var name = 'hello2';
name = 'world'
console.log(name);// 输出'world',可以理解现在栈中新有一块地址存储的是world,但是它的标识符是name,现在name代表的是world了。
二基本数据类型不可以添加属性和方法
三基本数据类型是简单赋值
var a = 10;
var b = a;// 这里理解是把10给了b
b = 15;
console.log(a);// 10
console.log(b);// 15
a和b有各自的存储空间
四基本数据类型是值比较
var a = '{}';
var b = '{}';
console.log(a == b);// 这里是字符串的比较,所以返回是true
五基本数据类型存放在栈中。
栈里存放的是一个字典
左侧是Key(变量名)右侧是value(真正的值)
2引用类型
一值是可以改变的
var o = {x:1};
o.x = 2;// console.log(o.x)已经变为2
二可以添加属性和方法
var obj = {};
obj.name='zs';
obj.getName=function(){console.log(obj.name)}
三引用类型赋值的是对象引用
var a = {};
var b = a;// b在栈中新建了一个地址,指向了a在堆中存储的数据
a.name = 'change';// a的更改会影响b的数值
console.log(a.name);// change
console.log(b.name);// change
四引用类型比较的是引用地址
var a = {};
var b = {};
console.log(a == b);// 在内存中地址是动态分配的,这里返回false
五引用类型数据会保存在栈和堆中
var a = {name:'zs'}
栈中保存的是a和一个分配的地址
堆中保存的是{name:'zs'}
基本包装类型即Number,Boolean,String(首字母大写,现在看成是一个类型)
js本身自带的。
var str1 = 'hello';
实际在js内部执行了下面操作:
var str1 = new String('hello');
var str2 = str1.substr(2);
str1 = null;// 这里就释放了str1与值得关联,在垃圾收集器回收时候,自动回收。因为自动执行了这一步所以基本数据类型无法添加属性和方法。只有基本包装类型才会有这一步。
js基本数据类型和引用类型的区别详解-笔记的更多相关文章
- JavaScript 基本数据类型和引用类型的区别详解
js基本数据类型: js基本数据类型包括:undefined,null,number,boolean,string.基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值 1. 基本数据类 ...
- mysql数据类型double和decimal区别详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt336 实数是带有小数部分的数字.然而,它们不只是为了存储小数部分,也可以使用 ...
- JQ的offset().top与js的offsetTop区别详解
一.前言 最近在做一个图片懒加载的插件,就纵轴(Y轴)而言,我需要时时获取图片的上偏移量,好判断是否已进入视图区域,而我所理解的是offsetTop应该是跟offset().top一样的,然后陷入了因 ...
- js 基础数据类型和引用类型 ,深浅拷贝问题,以及内存分配问题
js 深浅拷贝问题 浅拷贝一般指的是基本类型的复制 深拷贝一般指引用类型的拷贝,把引用类型的值也拷贝出来 举例 h5的sessionStorage只能存放字符串,所以要存储json时就要把json使用 ...
- 检索01-c#中基本数据类型和引用类型的区别
1.基本定义 基本数据类型包括:整型.浮点型.字符型.结构体.布尔型.日期时间.枚举类型等 引用类型包括:字符串.类.数组.接口等 堆定义:是一种特殊的树形数据结构,每个结点都有一个值,一般由程序员分 ...
- JQ的offset().top与JS的getBoundingClientRect区别详解,JS获取元素距离视窗顶部可变距离
壹 ❀ 引 我在 JQ的offset().top与js的offsetTop区别详解 这篇博客中详细分析了JQ方法offset().top与JS属性offsetTop的区别,并得出了一条offset( ...
- GoLang基础数据类型--->字典(map)详解
GoLang基础数据类型--->字典(map)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 可能大家刚刚接触Golang的小伙伴都会跟我一样,这个map是干嘛的,是 ...
- HTTP POST GET 本质区别详解
HTTP POST GET 本质区别详解 一 原理区别 一般在浏览器中输入网址访问资源都是通过GET方式:在FORM提交中,可以通过Method指定提交方式为GET或者POST,默认为GET提交 Ht ...
- javascript中=、==、===区别详解
javascript中=.==.===区别详解今天在项目开发过中发现在一个小问题.在判断n==""结果当n=0时 n==""结果也返回了true.虽然是个小问题 ...
随机推荐
- Codeforces Round #556 (Div. 2) - C. Prefix Sum Primes(思维)
Problem Codeforces Round #556 (Div. 2) - D. Three Religions Time Limit: 1000 mSec Problem Descripti ...
- 高阶篇:4.1.2.2)产品部件级别的QFDII
本章目的:介绍产品部件级别的QFDII编写方法. 1.前言 这章接前面总成级别的QFDII. 产品部件级别的QFDII,其实就是将部件QFDII所得到的设计要求,进一步分配给部件其装配层级的零部件中. ...
- 颠覆我的Thread.join()
学而时习之,不亦说乎! --<论语> 为什么说是颠覆? 1)任何对象都可以作为锁对象,锁对象的行为都是一样的吗?之前我一直认为锁对 ...
- Linux下配置redis,c#简单调用
redis比较流行的nosql库: 我这里测试本机window系统,虚拟机安装linux系统,linux系统部署redis,windwo系统,c#调用linux系统的redis 第一步:linux下安 ...
- c#操作mysql
using System; using MySql.Data; using MySql.Data.MySqlClient; using System.Data; using System.Linq; ...
- 服务端模拟http服务请求客户端
try { InputStream in = req.getInputStream(); int i = -1; ByteArrayOutputStream out = new ByteArrayOu ...
- 爬虫--XPATH解析
今天说一下关于爬取数据解析的方式---->XPATH,XPATH是解析方式中最重要的一种方式 1.安装:pip install lxml 2.原理 1. 获取页面源码数据 2.实例化一个etr ...
- Python归纳 | WSGI协议
1.WSGI介绍 1.1什么是WSGI 1.2怎么实现WSGI 2.由Django框架分析WSGI 3.实际环境使用的wsgi服务器 4.WSGI服务器比较
- iis支持asp.net4.0的注册命令使用方法及部署网站注意事项
如果没有按照正常的先装iis后装.net的顺序,可以使用以下命令重新注册一下,这样iis就可以支持asp.net 4.0了 32位的Windows: 1. 运行->cmd,打开窗口时请以管理 ...
- selenium+python(模块化驱动测试)
模块化驱动测试,就是借鉴编程语言中模块化的思想,把重复的操作独立成功公告模块,懂用例执行过程中需要用到这一模块操作时则被调用,这样可以极大的消除重复从而提高测试用例的可维护性 下面具体以126邮箱为例 ...