博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript学习笔记第一天——基本数据类型(值类型)和引用类型
阅读量:5289 次
发布时间:2019-06-14

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

一、JavaScript值类型和引用类型有哪些 

(1)值类型:数值、布尔值、null、undefined、string(字符串在赋值运算中会按引用类型的方式来处理)。 
(2)引用类型:对象、数组、函数。 

 

值类型一般是一些固定的字节大小的;引用类型往往存储数组,对象,函数这些实现很难知道占据内存大小的量。

 

二、如何理解值类型和引用类型及举例 

我们可以用“连锁店”和“连锁店钥匙”来理解。 
(1)值类型理解:变量的交换等于在一个新的地方按照连锁店的规范标准(统一店面理解为相同的变量内容)新开一个分店,这样新开的店与其它旧店互不相关、各自运营。

【值类型例子】

 

function chainStore() { 

   var store1='Nike China'; 
   var store2=store1; 
   store1='Nike U.S.A.'; 
   alert(store2); //Nike China 
chainStore(); 

//把一个值类型(也可以叫基本类型)store2传递给另一个变量(赋值)时,其实是分配了一块新的内存空间,因此改变store1的值对store2没有任何影响,因为它不像引用类型,变量的交换其实是交换了指像同一个内容的地址。

 

(2)引用类型理解:变量的交换等于把现有一间店的钥匙(变量引用地址)复制一把给了另外一个老板,此时两个老板同时管理一间店,两个老板的行为都有可能对一间店的运营造成影响。

【引用类型例子】

function chainStore() { 

   var store1=['Nike China']; 

   var store2=store1; 
   alert(store2[0]); //Nike China 
   store1[0]='Nike U.S.A.'; 
   alert(store2[0]); //Nike U.S.A. 
chainStore(); 
//在上面的代码中,store2只进行了一次赋值,理论上它的值已定,但后面通过改写store1的值,发现store2的值也发生了改变,这正是引用类型的特征,也是我们要注意的地方。

 

基本数据类型使用值(value)的方式进行比较                

var a = "Roger";
var b = "Roger";
 
if (a == b) // => true
if (a === b) // => true

引用类型通过引用(reference)进行比较

var a = { x: 1, y: 7 };
var b = { x: 1, y: 7 };
if (a == b) // => false
if (a === b) // => false
 
b = a;
if (a == b) // => true
if (a === b) // => true

基本数据类型使用值(value)的方式进行传递

function foo(bar) {
  bar = 2;
}
var a = 1;
foo(a);
alert(a); // => 1

引用类型通过引用(reference)方式进行传递

function foo(bar) {
  bar.x = 2;
}
var a = { x: 1, y: 7 };
foo(a);
alert(a.x); // => 2
 
注意  去引用之后将不能再修改原来的值  (此时bar指向了{x:2}这个对象,不再指向{x:1,y:2})
function foo(bar) {
     bar = { x: 2 };
}
var a = { x: 1, y: 7 };
foo(a);
alert(a.x); // still 1

 

转载于:https://www.cnblogs.com/cikeyin/p/3792877.html

你可能感兴趣的文章
angular(1.5.8)
查看>>
h5的video标签支持的视频格式
查看>>
大数据没那么重要
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
学android:直接用jdk来helloworld
查看>>
Access Jira RESTful API by cURL
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
Spark基础脚本入门实践3:Pair RDD开发
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
RIA Test:try catch 对 Error #1009 (无法访问空对象引用的属性或方法)的处理
查看>>
python使用easyinstall安装xlrd、xlwt、pandas等功能模块的方法
查看>>
一个杯子的测试用例
查看>>
数据之间的转换
查看>>
前端面试总结——http、html和浏览器篇
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
JavaScript之注释和运算符
查看>>
openCV(一)---将openCV框架导入iOS工程中
查看>>
Spring面试题
查看>>