zoukankan      html  css  js  c++  java
  • JavaScript中的值和引用

    JavaScript5中有6种基本数据类型:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)

    ES6中新引入一种原始数据类型:Symbol,表示独一无二的值。ES5中对象属性名都是字符串,比较容易造成属性名冲突。比如,当你使用了一个他人提供的对象,你想为这个对象添加一个新的方法,新方法的名字就有可能与现有方法产生冲突,如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol的原因。

    在JavaScript中,有些类型是复制了值,有些是复制了引用:

    原始值(复制值)

    null

    undefined

    Boolean

    Number

    String

    对象(复制引用)

    Object

    Array

    Function

    原始值:当我们把这些初始值赋给了变量的时候, 我们 复制了值 .

    var a = 5;
    
    var b = a;
    
    a = 10;
    
    console.log(a); // 10
    console.log(b); // 5
    
    // 这也同样适用于 string, boolean, null, undefined

    对象:

    var a = {};
    var b = a;
    
    a.a = 1;
    
    console.log(a); // {a: 1}
    console.log(b); // {a: 1}

    对于数组也是复制引用:

    var a = [];
    var b = a;
    
    a.push(1);
    
    console.log(a); // [1]
    console.log(b); // [1]
    console.log(a === b); // true

    关于[10]===[10]的例子

    console.log([10]===[10]);  //false

    当我们比较对象的时候,相等运算符(===)会检查他们是否指向相同的地址。所以如果 [10]和 [10] 是两个不同的数组,结果就会返回 false 。当你想要对比两个对象或者数组是不是相同的方法很简单,但是这样的方法也很有限

    JSON.stringify(a) === JSON.stringify(b)

    尽管这样的方法在数组和对象内部顺序不一样的时候,还是会出错。如果你想要更健壮的解决方法的话,参考 lodash _.isEqual() method

    参考:https://www.tuicool.com/articles/YnMv2uz

  • 相关阅读:
    Nginx安装与运行配置总结
    不知道为什么随笔分类出不来
    springboot打war包
    python爬取网站页面时,部分标签无指定属性而报错
    python爬取某站新闻,并分析最近新闻关键词
    插了带蠕虫的U盘后,文件不见了怎么快速恢复
    CompTIA Security+ 常见知识点
    JAVA学习--集合的遍历
    JAVA学习--ArrayList使用方法:List的主要实现类
    JAVA学习--异常Exception的处理
  • 原文地址:https://www.cnblogs.com/xuepei/p/8086454.html
Copyright © 2011-2022 走看看