博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原始值与引用值(ES6学习笔记)
阅读量:2159 次
发布时间:2019-05-01

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

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

  • ES设计了6种原始值:Undefined、Null、Boolean、Number、String、Symbol。

  • 保存原始值的变量是按值访问,操作存储在变量内存中的实际值。

  • 原始值是不可以改变的。

  • 原始值不能有属性。

    // 原始值{
    let one1 = 'Tom'; console.log(one1,one1.age); //Tom undefined 它的属性值是不会被打印出来的}
  • 原始值可以包装类型

    1、为了方便操作原始值,ES6提供了3种特殊的引用类型:Boolean、Number、String。

    2、每当用到原始值的方法和属性时,后台会创建一个临时的包装类型对象,从而得以使用原始值的各种方法。

    // 原始值包装类型{
    let s1 = "hello world"; let s2 = s1.substr(0,5); console.log(s1,s2); //hello world hello}

    后台执行的步骤:

    a) 创建一个包含原始值的String类型临时实例;
    b) 调用该临时实例的特定方法;
    c) 销毁该临时实例;

    typeof检查原始值可得出其具体类型,但检查对象都是object。

    {
    let value = '200'; let number = Number(value); // Number()强制转换函数 console.log(typeof number); // number }{
    let value = '200'; let number = new Number(value); // new Number()构造函数 console.log(typeof number); // object}{
    let n1 = 100; let n2 = new Number(n1); console.log(typeof n2); // object 所有对象的类型都是object console.log(typeof n2.valueOf()); // number valueof()把包装对象的原始值取出来了。 console.log(n1 + n2); // 200 console.log(n1 + n2.valueOf()); // 200}

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

  • ES不允许直接访问对象的内存空间。

  • 实际操作对象时,访问的是保存对象的内存地址,即该对象的引用。

  • 引用值(对象)可以随时添加、修改和删除其属性和方法。

    // 引用值{
    let person = new Object(); person.name = 'John'; person.showMe = function(){
    console.log("Hi,I'm " + this.name); } person.showMe(); //Hi,I'm John}

原始值与引用值传递区别

  • 本质上无区别,都是将一个变量中保存的信息赋值给另一个变量。

  • 但对象变量中保存的是地址,所以它传递的是地址,改变其中一个变量的值,另一个变量会相继改变,因为它们都指向同一个地址。

    {
    let a = 100; let b = a; b++; console.log(a,b); //100 101}{
    let ob = {
    value:100}; let oa = ob; oa.value = 200; console.log(ob.value,oa.value); //200 200}

typeof( ) 与 instanceof( )

  • typeof检查原始值可得出其类型,但检查引用值就不能具体判断出其类型,因为都为object。

    // typeof {
    let s = "Nick"; console.log(typeof s); //string let b = true; console.log(typeof b); //boolean let i = 22; console.log(typeof i); //number let u; console.log(typeof u); //undefined let n = null; console.log(typeof n); //object let obj = new Object(); console.log(typeof obj); //object let arr = new Array(); console.log(typeof arr); //object let a = [1, 2, 3]; console.log(typeof a); //object}
  • typeof对于引用值意义不大,通常采用instanceof操作符来判断引用值的类型。

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

转载地址:http://zugwb.baihongyu.com/

你可能感兴趣的文章
Intellij IDEA使用(三)——在Intellij IDEA中配置Tomcat服务器
查看>>
Intellij IDEA使用(四)—— 使用Intellij IDEA创建静态的web(HTML)项目
查看>>
Intellij IDEA使用(五)—— Intellij IDEA在使用中的一些其他常用功能或常用配置收集
查看>>
Intellij IDEA使用(六)—— 使用Intellij IDEA创建Java项目并配置jar包
查看>>
Eclipse使用(十)—— 使用Eclipse创建简单的Maven Java项目
查看>>
Eclipse使用(十一)—— 使用Eclipse创建简单的Maven JavaWeb项目
查看>>
Intellij IDEA使用(十三)—— 在Intellij IDEA中配置Maven
查看>>
面试题 —— 关于main方法的十个面试题
查看>>
集成测试(一)—— 使用PHP页面请求Spring项目的Java接口数据
查看>>
使用Maven构建的简单的单模块SSM项目
查看>>
Intellij IDEA使用(十四)—— 在IDEA中创建包(package)的问题
查看>>
Redis学习笔记(四)—— redis的常用命令和五大数据类型的简单使用
查看>>
Win10+VS2015编译libcurl
查看>>
Windows下使用jsoncpp
查看>>
Ubuntu下测试使用Nginx+uWsgi+Django
查看>>
Windows下编译x264
查看>>
visual studio调试内存泄漏工具
查看>>
开源Faac实现PCM编码AAC
查看>>
Windows下wave API 音频采集
查看>>
借船过河:一个据说能看穿你的人性和欲望的心理测试
查看>>