总结:

1、原始值,表示单一的数据,如10,“abc”,true等。

1.1、 ES的6种原始值: Undefined、Null、Boolean、Number、String、Symbol
1.2、 保存原始值的变量是按值访问,操作存储在变量内存中的实际值

2、引用值,表示有多个值(原始值或其他引用值)构成的对象

2.1、 ES不允许直接访问对象的内存空间。
2.2、 实际操作对象时,访问的是保存对象的内存地址,即该对象的引用。

3、动态属性

3.1、 原始值是不可改变的。
3.2、 引用值(对象)可以随时添加、修改和删除它的属性和方法。
如:

let person = new Object();
person.name = "小明";
person.sayhello= function () {
console.log("Hello, I'm " + this.name);
};
console.log(person)

运行结果:{ name: '小明', sayhello: [Function (anonymous)] }
3.3、 原始值不能有属性
如:

let one = "小明";
one.age = 20;
console.log(one, one.age);

运行结果:
小明 undefined

4、值传递

4.1、 赋值,即将值复制给变量的过程
4.2、 原始值与引用值本质上没有区别,都是将一个变量中保存的信息复制给另一个变量,如:

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

5、确定类型

5.1、 方法:通过typeof操作符来判断一个值的类型
如:

let a = null;
let b = new Object();
let c = [1, 2, 3];
let d = "abcds";
let e;
let f = 123
let g = true
console.log(typeof a); // object
console.log(typeof b); // object
console.log(typeof c); // object
console.log(typeof d); // string
console.log(typeof e); // undefined
console.log(typeof f); // number
console.log(typeof g); // boolean

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

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

6、原始值包装类型

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

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

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

ES6 学习笔记(三)原始值与引用值的更多相关文章

  1. ES6学习笔记<三> 生成器函数与yield

    为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...

  2. ES6学习笔记三

    1.Symbol ES5 的对象属性名都是字符串,这容易造成属性名的冲突.如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突.这就是 ES6 引入Symbol的原因 ...

  3. ES6学习笔记三:Symbol、Set、Map

    一:Symbol ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值.它是 JavaScript 语言的第七种数据类型,前六种是:undefined.null.布尔值(Boolean). ...

  4. ES6学习笔记(二):引用数据类型

    Array 新增方法 1.Array.from() 将类数组(dom对象 或 arguments)或set\map对象转换为数组 2.Array.of() 将一组值转换为数组,例如Array.of(3 ...

  5. ES6学习笔记(三)——数值的扩展

    看到这条条目录有没有感觉很枯燥,觉得自己的工作中还用不到它所以实在没有耐心看下去,我也是最近得闲,逼自己静下心来去学习去总结,只有在别人浮躁的时候你能静下心来去学去看去总结,你才能进步.毕竟作为前端不 ...

  6. ES6学习笔记三(proxy和reflect)

    proxy用法 // 代理 { let obj={ time:'2017-03-11', name:'net', _r: }; let monitor=new Proxy(obj,{ // 拦截对象属 ...

  7. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  8. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  9. ES6学习笔记<一> let const class extends super

    学习参考地址1  学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...

  10. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

随机推荐

  1. 根节点选择器和 html 选择器

    CSS 中除了用标签选择器选中<html>标签以外还有一个等价的是:root选择器.CSS 变量是有作用域的,全局变量都可以声明在<html>里. <div class= ...

  2. 国家都给NISP证书的补贴了!关于NISP考试的政策有哪些?

    NISP证书由中国信息安全测评中心依据中编办赋予"信息安全服务和信息安全专业人员的能力评估与资质审核"的职能而推出的证书,是中国信息安全测评中心代表国家实施的信息安全人员能力评定证 ...

  3. [PostgreSql]生产级别数据库安装要考虑哪些问题?

    大家好,我是字母哥(coder)! 我让公司的小伙伴写一个生产级别的PostgreSQL的安装文档,结果他和我说:"不是用一个命令就能安装好么?还用写文档么?".我知道他想说的是这 ...

  4. 系统CPU飙高,怎么排查?

    cpu是整个电脑的核心计算资源,对于一个应用进程来说,cpu的最小执行单元是线程. 导致cpu飙高的原因有几个方面: cpu上下文切换过多,对于cpu来说,同一时刻下每个cpu核心只能运行一个线程,如 ...

  5. WAF对抗-安全狗(联合查询篇)

    WAF对抗-安全狗(联合查询篇) 实验环境 网站安全狗APACHE版V4.0.靶场:dvwa 为了方便对比可以在这个在线靶场申请一个dvwa https://www.vsplate.com/ mysq ...

  6. Stringboot中@Autowired加了static就属性值就为null

    //错误 @Autowired private static DepartmentDao departmentDao; @Autowired注入,将bean注入进来 @Autowired通过sprin ...

  7. Python入门系列(四)别再傻傻分不清:列表、元组、字典、集合的区别

    总结分析列表.元组.字典.集合的相同与区别之处,只有彻底分清之后,就会在应用的时候,得心应手. 四句话总结 列表是一个有序且可更改的集合,允许重复成员. 元组是一个有序且不可更改的集合,允许重复成员. ...

  8. 完全彻底的卸载MySQL5.7.35

    最开始接触计算机的时候关于MySQL卸载的这个问题,导致我重装了一次系统.就在今天我又遇到了同样的问题. Setp①: 想要安装新的数据库软件必须要先彻底且干净的删除掉以前的数据库. 第一步要做的是停 ...

  9. KingbaseES 如何实现Oracle pipelined 功能

    管道函数即是可以返回行集合(可以使嵌套表nested table 或数组 varray)的函数,我们可以像查询物理表一样查询它或者将其赋值给集合变量.KingbaseES 数据库可以用 setof 实 ...

  10. 使用 Vue3 构建 Web Components

    有时候想写一个无关框架组件,又不想用原生或者 Jquery 那套去写,而且还要避免样式冲突,用 Web Components 去做刚觉就挺合适的.但是现在 Web Components 使用起来还是不 ...