javascript值类型和引用类型

一、引言

ECMAScript包含两个不同类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段;引用类型值指由多个值构成的对象。当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值。(《javascript高级程序设计(第3版)》)

二、基本类型值和引用类型值

(1)基本类型值

  包括Undefined、Null、Boolean、Number和String.这5种基本数据类型是按值访问的,操作保存在变量中的实际的值。

  例子:

var aa = 10;
var bb =aa;
console.log(aa); //10
console.log(bb); //10

bb=11;
console.log(aa); //10
console.log(bb); //11

上面的例子,bb获取值是aa值的一份拷贝,虽然,两个变量的值是相等,但是两个变量分别保存了一份基本数据类型值,完全是独立的。所以,当bb的值改变时,aa的值依然是10;

演示:

(2)引用类型值

包括Function、Object、Array。引用类型变量的复制:复制的是存储在栈中的指针,将指针复制到栈中未新变量分配的空间中,而这个指针副本和原指针执行存储在堆中的同一个对象。

例子:

var a=[1,2,3];
var b=a;
alert(b);//1,2,3

a[0]=100;
alert(b); //100,2,3

 对象是存放在内存中的堆。上面的例子,b是a的一份拷贝,而a和b其实是存储在栈中的地址,指向数组对象的地址,复制操作结束后,a,b两个变量实际上将引用同一个对象,因此改变其中的一个,将影响另一个。

演示:

三、类型检测

 typeof 可以检测出Undefined、Null、Boolean、Number、String和Object。但是却无法检测出是否是array,那么还有一个检测方法 instanceof。

var s = ‘hello‘;
var n =1;
var u;
var b =true;
var nu=null;
var o =new object();
var a = new Array();

console.log(typeof s); //string
console.log(typeof n); //number
console.log(typeof u); //undefine
console.log(typeof b); //boolean
console.log(typeof nu); //object
console.log(typeof o); //object
console.log(typeof a); //object

console.log(o instanceof Object); //true
console.log(a instanceof Array); //true
console.log(o instanceof RegExp); //false

  

 四、问题

那么对于引用类型的数据,该怎么备份?难道把数组变为基本类型,这个问题我暂时没有找到答案。

时间: 2024-08-05 21:29:04

javascript值类型和引用类型的相关文章

JavaScript 值类型和引用类型的初次研究

今天遇到一个坑,具体的不多说,直接上代码 var a = [ [],[],[1,2,3] ] var b = ['颜色','大小','尺寸'] var arr = [] for(let i = 0; i < a.length; i ++){ let obj = {} for(let j = 0; j < a[i].length; j ++){ obj[b[i]] = a[i][j] arr.push(obj) console.log(arr) console.log(obj) } } cons

Javascript 值类型和引用类型

本篇文章由:http://xinpure.com/javascript-value-types-and-reference-types/ Javascript变量类型 值类型: 字符串.数字.布尔.Null.Undefined 引用类型: 数组.对象.函数 值类型与引用类型的比较 通过两个实例来比较这两种类型 (调试环境: Chrome 开发者工具 Console) 值类型实例 var a = 'hello'; var b = a; b; /* hello */ a = 'world'; b;

JavaScript基本数据类型及值类型和引用类型

在JavaScript中四种基本的数据类型:数值(整数和实数).字符串型(用“”号或‘'括起来的字符或数值).布尔型(使True或 False表示)和空值.在JavaScript的基本类型中的数据可以是常量,也可以变量.由于JavaScript采用弱类型的形式,因而一个数据的 变量或常量不必首先作声明,而是在使用或赋值时确定其数据的类型的.当然也可以先声明该数据的类型,它是通过在赋值时自动说明其数据类型的. javascript中的变量 javascript中的变量只是一个占位符,前言已经说过了

js值类型与引用类型

JavaScript值类型和引用类型有哪些 (1)值类型:数值.布尔值.null.undefined. (2)引用类型:对象.数组.函数. 三.如何理解值类型和引用类型及举例 我们可以用"连锁店"和"连锁店钥匙"来理解,不知道以下比喻合不合适,^-^. (1)值类型理解:变量的交换等于在一个新的地方按照连锁店的规范标准(统一店面理解为相同的变量内容)新开一个分店,这样新开的店与其它旧店互不相关.各自运营. [值类型例子] 代码如下: function chainSt

JavaScript中的值类型和引用类型

先抛出一个题目,阿里的笔试面试题(很基础,但确实是阿里的笔试题) var a = {"x": 1}; var b = a; a.x = 2; a = {"x": 3}; console.log(b.x); 大家觉得最后在控制台输出的结果是多少? 如果你答案是2,那你就没必要接下去看了.如果不是.那你就接着看下去来解决你的疑惑吧! JavaScript中的值类型和引用类型 在javascript里面有两种变量类型,一种是值类型,一种是引用类型. 值类型:数值.布尔型.

数据类型(1) - 值类型和引用类型

和javascript等脚本语言不同,C#基本上可以说是强类型的编程语言.这意味着,任何变量在编译时(而不是运行时)就必须要有一个类型.直到c#4.0,引入了动态类型为止.c#的弱类型体现在其类型object中.任何变量都可以是object类型的,也就是说他们在编译时没有类型,肯定能通过编译.但错误将会在运行时才发生. 强类型的好处有很多,例如可以保证类型安全(否则将会发生运行时错误),可以享受IDE带来的智能提示等,不容易出错(出错可以在编译的时候就知道).c#有很多数据类型,而他们可以分为两

定义类+类实例化+属性+构造函数+匿名类型var+堆与栈+GC回收机制+值类型与引用类型

为了让编程更加清晰,把程序中的功能进行模块化划分,每个模块提供特定的功能,而且每个模块都是孤立的,这种模块化编程提供了非常大的多样性,大大增加了重用代码的机会. 面向对象编程也叫做OOP编程 简单来说面向对象编程就是结构化编程,对程序中的变量结构划分,让编程更清晰. 类的概念: 类实际上是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法. 类定义了类的每个对象(称为实例)可以包含什么数据和功能. 类中的数据和函数称为类的成员:数据成员        函数成员 数据成员: 数据成员

Java值类型和引用类型

[定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字符型4,逻辑型 八种: 1,整型3种 by

java 值类型和引用类型的区别

1. Java中值类型和引用类型的不同? [定义] 引用类型表示你操作的数据是同一个,也就是说当你传一个参数给另一个方法时,你在另一个方法中改变这个变量的值, 那么调用这个方法是传入的变量的值也将改变.值类型表示复制一个当前变量传给方法, 当你在这个方法中改变这个变量的值时,最初生命的变量的值不会变.通俗说法: 值类型就是现金,要用直接用:引用类型是存折,要用还得先去银行取现.----(摘自网上) [值类型] 也就是基本数据类型 基本数据类型常被称为四类八种 四类: 1,整型 2,浮点型 3,字