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日

相关文章

  • JavaScript new对象的四个过程实例浅析

    JavaScript new对象的四个过程实例浅析 在JavaScript中,使用new关键字可以创建一个对象。但是,创建对象并不是一件简单的事情,它会涉及到四个过程,本文将详细讲解这四个过程以及示例分析。 1、创建对象 当使用new关键字创建一个对象时,JavaScript会在内存中为该对象分配空间。这个空间会保存该对象的所有属性和方法。我们先来看一个简单…

    JavaScript 2023年5月27日
    00
  • 详细聊聊闭包在js中充当着什么角色

    闭包是Javascript中一个非常重要的概念,它常常被用来解决一些特殊的问题。在深入探讨闭包在Javascript中扮演的角色之前,先来了解一下什么是闭包。 什么是闭包 在Javascript中,函数内部可以访问到函数外部的变量,而闭包就是指函数内部持有对函数外部变量的引用。 在Javascript中,每个函数都会创建一个作用域。当一个函数内部引用了外部的…

    JavaScript 2023年6月10日
    00
  • 微信小程序表单验证功能完整实例

    下面是关于“微信小程序表单验证功能完整实例”的详细攻略,包含了代码实现和示例说明。 1. 简介 在微信小程序开发过程中,我们经常需要使用表单来收集用户数据。为了保证数据的有效性和安全性,我们需要对表单数据进行验证。下面我们就来介绍一种微信小程序表单验证功能的完整实例。 2. 实现步骤 2.1 HTML 结构 首先,我们需要在 HTML 中添加表单元素,并设置…

    JavaScript 2023年6月10日
    00
  • js中Function引用类型常见有用的方法和属性详解

    JS中Function引用类型常见有用的方法和属性详解 在JavaScript中,函数也是一种对象,属于Function类型引用。Function类型中有很多有用的方法和属性,接下来分别进行详细说明。 创建函数的方法 函数的创建有三种主要方式:函数声明,函数表达式和Function构造函数。其中函数声明方式最简单,也是最常见的方式: 函数声明 functio…

    JavaScript 2023年5月27日
    00
  • JS判断对象是否为空对象的几种实用方法汇总

    下面是详细讲解“JS判断对象是否为空对象的几种实用方法汇总”的攻略。 标题 JS判断对象是否为空对象的几种实用方法汇总 简介 我们在开发中经常会遇到判断一个对象是否为空的情况。如果使用传统的判断方法,比如if 语句、length属性等,会增加代码的复杂性和可读性。本文将介绍几种实用的判断对象是否为空的方法。 正文 方法一:使用for…in循环判断 可以使…

    JavaScript 2023年5月27日
    00
  • javascript时区函数介绍

    JavaScript 时区函数介绍 什么是时区? 为了使世界上所有地区的时钟都是同步的,人们将地球分为24个时间区,每个时间区之间相差1小时。在不同的时区,同一时刻的时间是不同的。 时区函数 JavaScript 提供了一些时区函数,使得开发者可以对不同时区的日期和时间进行格式化和处理。 1. Date.prototype.toLocaleString() …

    JavaScript 2023年5月27日
    00
  • JavaScript中isPrototypeOf函数

    下面是完整的JavaScript中isPrototypeOf函数的攻略: 标题 isPrototypeOf函数概述 isPrototypeOf() 是 JavaScript 中 Object 类型内置的函数之一。它用于判断一个对象是否是另一个对象的原型。原型链是 JavaScript 对象的核心概念之一,因此 isPrototypeOf() 函数通常被用于判…

    JavaScript 2023年5月28日
    00
  • js实现左右两侧浮动广告

    下面是关于“js实现左右两侧浮动广告”的完整攻略。 实现思路 我们首先需要确定广告层的定位方式,一般采用 position: fixed 来实现固定的效果。然后利用 JS 计算浏览器窗口的宽度,以及广告层的宽度,计算出广告层到浏览器窗口两侧的距离,以此确定广告层的位置。接着,我们需要监听浏览器窗口的 scroll 和 resize 事件,根据滚动的位置和窗口…

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