博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入了解JavaScript对象(1)--原始类型和引用类型
阅读量:6580 次
发布时间:2019-06-24

本文共 1867 字,大约阅读时间需要 6 分钟。

原始类型和引用类型

1.原始类型存储简单数据值,引用类型存储对象,其本质是指向内存位置的应用。

注:其他编程语言用栈存储原始类型,用堆存储引用类型。JavaScript原始值被保存在变量对象内,而引用值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。

2.原始类型:boolean,number,string,null,undefined。原始类型的变量直接保存原始值(而不是一个指向对象的指针),也就是说,当你将原始值赋值给一个变量时,该值被复制到变量中,每一个变量都有它自己的一份数据拷贝。

var name = '张三';var age = 18;var show = true;var object = null;var flag = undefined;// 一个变量的改变并不会影响到其他变量var color1 = 'red';var color2 = color1;console.log(color1);    // redconsole.log(color2);    // redcolor2 = 'blue';console.log(color1);    // redconsole.log(color2);    // blue

3.引用类型:引用类型不在变量中保存对象,所以例子中的object变量实际上并不包含对象的实例,而是一个指向内存中实际对象所在位置的指针(或者说是引用)。这就意味着,当你将一个对象赋值给变量时,实际上赋值给这个变量的是一个指针。也就是说,这两个变量指向内存中的同一个对象。

var object = new Object(); //保存指向内存中实际对象所在位置的指针

4.鉴别引用类型

instanceof操作符以一个对象和一个构造函数为参数。如果对象是构造函数所指定的类型的一个实例,instanceof返回true;否则返回false。intanceof操作符可鉴别继承类型,意味着所有的引用类型都继承Object。

var items = [];var object = {};function reflect(value){    return value;}console.log(items instanceof Array);    // trueconsole.log(object instanceof Object);    // trueconsole.log(reflect instanceof Function);    // true

5.鉴别数组

当JavaScript的值在同一个页面不同框架之间传来传去,再用instanceof来鉴别引用类型的时候,就可能出现问题,因为每一个框架都有它自己的全局上下文--Object、Array以及其他内建类型的版本。所以,当你把数组从一个框架传到另一个框架时,instanceof就无法识别,因为该数组是来自不同框架的Array的实例。所以这个时候,得用Array.isArray()方法来鉴别数组,该方法只兼容IE9及以上。

6.原始封装类型

原始封装类型共有3种,(String,Number和Boolean)。这些特殊引用类型的存在使得原始引用类型用起来和对象一样方便。例如:

var name = '张三';var firstChar = name.charAt(0);console.log(firstChar);    // 张// 背后发生的事情var name = '张三';var temp = new String(name);var firstChar = temp.charAt(0);temp = null;console.log(firstChar);    // 张var name = '张三';name.last = '王五';console.log(name.last);    // undefined// 背后发生的事情var name = '张三';var temp = new String(name);temp.last = '王五';temp = null;var temp = new String(name);console.log(temp.last);    // undefinedtemp = null;

转载于:https://www.cnblogs.com/shijianxiaoyu/p/7066224.html

你可能感兴趣的文章
centos 设置静态IP
查看>>
[Angularjs]系列——学习与实践
查看>>
js -- canvas img 封装
查看>>
转 我们工作的动力是什么 工作最终是为了什么?
查看>>
测试一个网站的最大并发量并发数并发用户
查看>>
适配器模式(数据库方面)支持不同的数据库连接
查看>>
Jenkins(二) 安装、新建Jobs与删除及SVN配置(转)
查看>>
CF456B Fedya and Maths 找规律
查看>>
touch修改mtime和atime
查看>>
nodejs安装及windows环境配置
查看>>
转载:Beginning WF 4.0翻译——第三章(流程图工作流)
查看>>
mysql alter table
查看>>
芯片测试
查看>>
记录一次tomcat下项目没有加载成功
查看>>
在源代码中插入防止盗版代码片段的方式
查看>>
hdu 3367 Pseudoforest(最大生成树)
查看>>
Spring mvc PostgreSQL 插入timestamp和int8
查看>>
一个人,一则故事,一份情愫,一个世界……
查看>>
ffserver联合ffmpeg建立媒体服务器
查看>>
下载稻草人下来刷新+gallery
查看>>