ES6-3-原始值与引用值

     ES将**数据**划分为:原始值和引用值。

在这里插入图片描述

原始值,表示单一的数据,如10,“abc”,true等。
ES设计了6种原始值:Undefined、Null、Boolean、Number、String和Symbol。
保存原始值的变量是按值访问,操作存储在变量内存中的实际值。

引用值,表示有多个值(原始值或其他引用值)构成的对象。
ES不允许直接访问对象的内存空间。
实际操作对象时,访问的是保存对象的内存地址,即该对象的引用

  • 原始值

-1.不可改变
值本身不可更改,但可以替换。
-2. 原始值不能有属性。

let one = "Tom";
one.age = 20;//这句不会报错,.运算符代表把one包装成一个对象,js会创建一个字符串构造对象,但是这种包装是临时的,用完就会销毁,所以下一句访问时就显示未定义。
console.log(one, one.age);
Tom undefined

-3.原始值包装类型

为了方便操作原始值,ES提供了3中特殊的引用类型:Boolean、Number和String。
每当用到某个原始值的方法或属性时,后台会创建一个相应的原始值包装类型的对象,从而暴露出操作原始值的各种方法

let s1 = "hello world";
let s2 = s1.substr(0, 5);
console.log(s1,s2);
 hello world hello


substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。
stringObject.substr(start,length)
start:要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推。
length:可选,子串中的字符数。必须是数值。

后台执行步骤:
(1)创建一个包含了原始值的String类型的实例;
(2)调用实例上的特定方法;
(3)销毁该实例;

let value = "200";
let number = Number(value);
console.log(typeof number);
let obj = new Number(value);
console.log(typeof obj);

//Number()直接调用作为转型函数,返回原始值,不具备装箱操作
//new Number()作为构造函数。返回对象,具备备装箱操作
  • 引用值(对象)

-1.可以随时添加、修改和删除其属性和方法。

let person = new Object();
person.name = "John";
person.showMe = function () {
  console.log("Hi, I'm " + this.name);
};
person.showMe();
Hi, I'm John
  • 原始值&引用值–区别

-1.值传递
将一个变量中保存的信息复制给另一个变量。

let a = 100;
let b = a;
b++;
console.log(a, b);
100 101

let obj1 = { value: 100 };
let obj2 = obj1;
obj2.value = 200;
console.log(obj1.value, obj2.value);
200 200
obj1与obj2引用的value是同一个地址空间,一个改变,另一个也要改变

-2.判断一个值的类型

  1. typeof操作符
    原始值
let s = "Nick";
let b = true;
let i = 22;
let u;
let n = null;
let obj = new Object();
let a = [1, 2, 3];
console.log(typeof s);
console.log(typeof b);
console.log(typeof i);
console.log(typeof u);
console.log(typeof n);
console.log(typeof obj);
console.log(typeof a);
string
boolean
number
undefined
object  //null是一个空对象
object
object//数组是一个特殊的对象

2.instanceof操作符

对于引用值,typeof的意义不大。
通常采用instanceof操作符,判断引用值是否为某个构造函数的实例。

let obj = new Object();
let a = [1, 2, 3];
console.log(obj instanceof Object);
console.log(a instanceof Array);
true
true

对象存储的是地址,大小是固定的,是引用值,
垃圾回收,没有被引用的对象会被标记,清理的时候优先清理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值