zoukankan      html  css  js  c++  java
  • JS-不可变的原始值和可变的对象引用

    JavaScript中的原始值(undefined、null、布尔值、字符串和数字)与对象有着根本区别。原始值是不可变的。

    1 var s = "hello";
    2 s.toUpperCase(); // => "HELLO",但并没有改变s的值
    3 consle.log(s); // => "hello",原始字符串并未改变

    对象和原始值不同,首先,它们是可变的:

    1 var o = {
    2    x:1   
    3 };
    4 o.x = 2; // 可以修改对象属性值
    5 0.y = 3; // 可以给对象添加新属性
    6 
    7 var a = [1,2,3]; // 数组也是可修改的
    8 a[0] = 0; // 更改数组的一个元素
    9 a[3] = 4; // 给数组添加一个新元素

    对象的比较并非值的比较:即使两个对象包含同样的属性以及相同的值,他们也是不相等的。此外,各个索引元素完全相等的两个数组也不相等。

    1 var o = { x:1 },p={ x:1 };
    2 o === p // => false:两个单独的对象永远不相等
    3 
    4 var a = [],b = [];
    5 a === b // => false:两个单独的数组永远不相等

    通常将对象称为引用类型(reference type),以此来和JavaScript的基本类型区分开来。

    对象值都是引用(reference),对象的比较均是引用的比较:当且仅当它们引用自同一个基对象时,它们才相等。

    1 var a = [];
    2 var b = a;
    3 b[0] = 1;
    4 a[0] // => 1:变量a也会修改
    5 a === b // => true:a和b引用自同一数组,因此它们相等
  • 相关阅读:
    docker基本命令
    服务器端使用DeferredResult异步推送技术
    单链表输出倒数第k个结点值(栈实现)
    fork炸弹
    BlockingQueue实现阻塞队列
    C#工作笔记
    实现一个简单的Log框架
    (转载)在spring的bean中注入内部类
    Spring整合Hessian
    spring整合axis2(最小配置化)的示例
  • 原文地址:https://www.cnblogs.com/fydxx/p/6026999.html
Copyright © 2011-2022 走看看