Javascript 赋值机制详解

Javascript 赋值机制详解

Javascript 是一门动态的编程语言,它的赋值机制相比一些静态编程语言来说要复杂得多。本文将详细讲解 Javascript 赋值机制的原理、规则和示例。

变量的赋值

基本类型

在 Javascript 中,变量分为基本类型和引用类型。基本类型包括 Number、String、Boolean、null、undefined 和 Symbol。

对于基本类型的变量,将一个变量的值赋给另外一个变量时,会将该变量的值复制一份,赋给新的变量。这种赋值方式称为值传递(pass by value)。

示例代码:

let a = 10;
let b = a;
b = 20;
console.log(a); // 10
console.log(b); // 20

在上面的代码中,变量 a 的值是 10,将其赋值给变量 b 后,修改 b 的值不会影响 a 的值。

引用类型

引用类型包括对象(Object)、数组(Array)、函数(Function)等。

对于引用类型的变量,将一个变量的值赋给另外一个变量时,会将该变量的引用复制一份,赋给新的变量。这种赋值方式称为引用传递(pass by reference)。

示例代码:

let arr1 = [1, 2, 3];
let arr2 = arr1;
arr2.push(4);
console.log(arr1); // [1, 2, 3, 4]
console.log(arr2); // [1, 2, 3, 4]

在上面的代码中,变量 arr1arr2 都引用了同一个数组,对 arr2 的修改也会影响到 arr1

对象的赋值

浅拷贝和深拷贝

在对对象进行赋值时,也是将对象的引用赋值给新的变量。但是,如果对对象的属性进行修改,因为是同一个对象,所有引用该对象的变量都会受到影响。

示例代码:

let obj1 = { name: 'Tom', age: 18 };
let obj2 = obj1;
obj2.age = 20;
console.log(obj1); // { name: 'Tom', age: 20 }
console.log(obj2); // { name: 'Tom', age: 20 }

以上代码执行后,变量 obj1obj2 都引用了同一个对象,对 obj2 的修改也会影响到 obj1

因此,在对对象进行赋值时,要注意浅拷贝和深拷贝的问题。浅拷贝只复制对象的一层属性,深拷贝会将所有的属性都复制一份,如果是嵌套的对象也会进行递归复制。

浅拷贝示例

示例代码:

let obj1 = { name: 'Tom', age: 18 };
let obj2 = Object.assign({}, obj1);
obj2.age = 20;
console.log(obj1); // { name: 'Tom', age: 18 }
console.log(obj2); // { name: 'Tom', age: 20 }

以上代码使用了 Object.assign() 方法进行浅拷贝,新创建一个空对象 {},将属性复制到该对象上。对 obj2 的修改不会影响到原对象 obj1

深拷贝示例

示例代码:

let obj1 = { name: 'Tom', age: 18, skill: { language: 'Javascript' } };
let obj2 = JSON.parse(JSON.stringify(obj1));
obj2.skill.language = 'Java';
console.log(obj1); // { name: 'Tom', age: 18, skill: { language: 'Javascript' } }
console.log(obj2); // { name: 'Tom', age: 18, skill: { language: 'Java' } }

以上代码使用了 JSON.stringify() 方法将对象转为 JSON 字符串,再用 JSON.parse() 方法将字符串转回对象,实现深拷贝。对 obj2 的修改不会影响到原对象 obj1

简单赋值

在 Javascript 中,使用等号 = 进行赋值时,根据该操作符的结合性和优先级,会先对等号右边的表达式进行求值,然后将该值赋给左边的变量。

示例代码:

let a = 1 + 2 + 3;
let b;
b = a = 4;
console.log(a); // 4
console.log(b); // 4

在以上代码中,由于 = 操作符的优先级比 + 低,所以先对右侧表达式 1 + 2 + 3 进行求值,得到 6,再将 6 赋值给变量 a。第二行代码中,先将 4 赋值给 a,再将 a 赋值给 b

总结

本文介绍了 Javascript 基本类型和引用类型的赋值机制,以及对象的浅拷贝和深拷贝的问题。同时介绍了简单赋值的规则和示例,希望能够帮助各位理解 Javascript 的赋值机制。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javascript 赋值机制详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • js实现0ms延时定时器的几种方式

    下面是详细的讲解“js实现0ms延时定时器的几种方式”的完整攻略。 什么是“0ms延时定时器” “0ms延时定时器”是指在JavaScript定时器中设置的延时时间为0ms,并且能够保证事件队列中下一个任务的执行完全在当前任务结束后立即执行。这种延时定时器对于实时性要求较高的操作非常有用,例如画布绘制、游戏开发等。 几种实现方式 以下是几种实现“0ms延时定…

    JavaScript 2023年6月11日
    00
  • 高级数据结构及应用之使用bitmap进行字符串去重的方法实例

    我来为您详细讲解“高级数据结构及应用之使用bitmap进行字符串去重的方法实例”的完整攻略。 一、什么是bitmap Bitmap是一种位图索引结构,它的基本原理是用一个bit位来表示某个元素对应的value。例如,如果一个数存在,则可以将这个数所对应的bit位标记为1,否则标记为0。Bitmap索引结构主要应用于快速判定某个元素是否属于一个集合中。 二、使…

    JavaScript 2023年5月28日
    00
  • Javascript 调用 ActionScript 的简单方法

    要在 JavaScript 中调用 ActionScript,可以借助 Adobe Flash 中提供的 ExternalInterface 类,该类的作用是为 ActionScript 提供一种在 Flash Player 中嵌入 JavaScript 代码的通信桥梁,使得 JavaScript 可以调用 ActionScript 中的函数或方法。 以下是…

    JavaScript 2023年5月27日
    00
  • JavaScript获取DOM元素的11种方法总结

    首先是“JavaScript获取DOM元素的11种方法总结”的完整攻略。 一、概述 在JavaScript中,操作DOM元素非常重要。而获取DOM元素是最基本的操作之一,因此我们需要清楚掌握获取DOM元素的方法。本文总结了JavaScript中获取DOM元素的11种方法,分别是: 通过ID获取元素 通过标签名获取元素 通过类名获取元素 通过name属性获取元…

    JavaScript 2023年5月27日
    00
  • 详解JavaScript语言的基本语法要求

    详解 JavaScript 语言的基本语法要求 JavaScript 是一门具有强大功能的编程语言,它在 Web 开发中广泛使用。本文将详细介绍 JavaScript 的基本语法要求。 变量 在 JavaScript 中,创建一个变量需要使用 var 关键字。变量可以包含任何类型的数据,例如字符、数值或者布尔值,它们可以在代码的任何位置被创建。 以下是创建变…

    JavaScript 2023年5月18日
    00
  • 老生常谈js中的MVC

    MVC(Model-View-Controller)是一种常用的架构模式,也是前端开发中常用的框架之一,它的目的是将应用程序的输入、处理和输出分离成模块化、清晰的结构,便于维护和开发。下面来详细讲解一下JavaScript中的MVC。 1. 模型层(Model) MVC的模型层(Model)代表一个应用程序中的数据和业务逻辑。任何来自控制器(Controll…

    JavaScript 2023年5月27日
    00
  • JS下高效拼装字符串的几种方法比较与测试代码

    下面是关于“JS下高效拼装字符串的几种方法比较与测试代码”的攻略。 什么是拼装字符串 在 JavaScript 中,我们可以将字符串拼接起来形成新的字符串。拼接字符串的方法有很多种,其中一些方法效率比其他方法更高。 常见的拼装字符串方法 使用 + 运算符: const strA = "Hello"; const strB = "…

    JavaScript 2023年5月28日
    00
  • JavaScript进阶教程(第一课)第3/3页

    下面我将为您详细讲解“JavaScript进阶教程(第一课)第3/3页”的完整攻略。 1. 确定目标 首先,我们要明确自己的目标是什么,这有助于我们更好地制定学习计划。对于“JavaScript进阶教程(第一课)第3/3页”这个教程来说,我们的目标应该是掌握以下内容: 理解 JavaScript 中的数据类型 掌握 JavaScript 对象的使用方法 学习…

    JavaScript 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部