首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript 是如何工作的:JavaScript 的共享传递和按值传递

关于JavaScript如何将值传递给函数,在互联网上有很多误解和争论。大致认为,参数为原始数据类时使用按值传递,参数为数组、对象和函数等数据类型使用引用传递。...它对数组和对象使用按值传递,但这是在的共享传参或拷贝的引用中使用的按值传参。这些说有些抽象,先来几个例子,接着,我们将研究JavaScript在 函数执行期间的内存模型,以了解实际发生了什么。...按值传参 在 JavaScript 中,原始类型的数据是按值传参;对象类型是跟Java一样,拷贝了原来对象的一份引用,对这个引用进行操作。...2)第二个是通过 setNewArray 方法把数组 arr1 传递进去,因为数组是对象类型,所以是引用传递,在这个方法里面我们更改 arr1 的指向,所以如果是这面向对象语言中,我们认为最后的结果arr1...为了跟踪函数调用期间参数是如何在 JS 中传递的,我们将例子一的代码使用汇编语言表示并跟踪其执行流程。

3.8K41
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript数组创建及常见方法汇总(修订版)

    数组不仅仅在JavaScript中扮演着非常重要的角色,而且在其它的程序语言中的重要性也是不言而喻的。...数组在面试的过程中被提及的频率是非常高的,同时JavaScript中的数组与其他语言中的的数组还是有些区别的。...创建数组 通过使用Array构造函数创建数组: /*************创建一个空的数组**************/ var arr1=new Array();//创建一个空的数组 console.log...(arr1);//[] arr1[0]="张三";//设置数组下标0的值为张三 arr1[1]="李四";//设置数组下标1的值为李四 console.log(arr1);//[ '张三', '李四'...: //其实即为Array的简化写法 var arr1 = []; //创建一个空数组 var arr2 = [20]; // 创建一个长度为1的数组 var arr3 = ["red","yellow

    39930

    JavaScript数组创建及常见方法汇总

    数组不仅仅在JavaScript中扮演着非常重要的角色,而且在其它的程序语言中的重要性也是不言而喻的。...数组在面试的过程中被提及的频率是非常高的,同时JavaScript中的数组与其他语言中的的数组还是有些区别的。...创建数组 通过使用Array构造函数创建数组: /*************创建一个空的数组**************/ var arr1=new Array();//创建一个空的数组 console.log...(arr1);//[] arr1[0]="张三";//设置数组下标0的值为张三 arr1[1]="李四";//设置数组下标1的值为李四 console.log(arr1);//[ '张三', '李四'...: //其实即为Array的简化写法 var arr1 = []; //创建一个空数组 var arr2 = [20]; // 创建一个长度为20的数组 var arr3 = ["red","yellow

    43140

    如何处理 JavaScript 比较中的临界情况

    在下一个例子中,我将细致地解释发生了什么,所以你会对算法做了什么有个清楚的想象: var arr1 = []; var arr2 = []; //1. arr1 == !...文档 中的规则。在以上代码的第 6 行,比较了一个基本类型值和一个非基本类型值。在这种情况下,采用规则 №11 。该算法的结果是一个空字符串。 在下一步中,将一个空字符串和 false 相比较。...; 首个 if 子句是自解释的,所以我不会费时赘述。一如之前的例子,我引用了 ?文档 中的规则。当其中一个被比较的值是非基本类型时,比较数组和布尔值会调用 ?...检查数组值的存在性最好的办法就是明确的检查 .length 以确定其是个字符串还是个数组: const arr1 = [1, 2, 3]; const arr2 = []; if (arr1) {...如你所见,一个空数组将返回 true (强制转换为布尔值之后)。处理对象是也应采用同样的办法 -- 总是做深层检查。

    1.8K30

    TypeScript 4.0 RC发布,带来诸多更新

    可变元组类型 考虑 JavaScript 中称为 concat 的函数,该函数接收两个数组或元组类型,并将它们连接在一起以创建一个新数组。...function concat(arr1, arr2) { return [...arr1, ...arr2]; } 考虑 tail,它接收一个数组或元组,并返回除第一个元素外的所有元素。...B, C, D, E, F], arr2: []): [A, B, C, D, E, F];) 这是第二个数组始终为空时的七个重载。...但是有三个值得注意的例外:逻辑和(&&),逻辑或(||)和空值合并(??)。TypeScript 4.0 添加了三个新的赋值运算符:&&=,||= 和??=。...TypeScript 4.0 在转换常见模式时可以利用可选链和空值合并的优势! 我们认为这种重构应该能捕获大多数用例的意图,尤其是当 TypeScript 对你的类型有更精确的了解时。

    2.7K20

    js中常用的内置对象

    // 第一种,直接创建数组 var arr1 = []; // 创建一个空数组 // 第二种,通过new Array()创建数组 var arr2 = new Array(); // 创建一个空数组...添加数组元素 // 添加数组元素 arr1 = [1, 2, 3]; arr2 = ['虎', '兔', '龙']; // 第一种,push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度...删除数组元素 // 删除数组元素 arr1 = [1, 2, 3, 4]; arr2 = ['牛', '虎', '兔', '龙']; // pop()方法从数组中删除最后一个元素,并返回该元素的值。...b.push(a[i]);//把筛选出来的值加到新数组中 } } console.log(b); 8.翻转数组 //方法将数组中元素的位置颠倒,并返回该数组。...* 11.数组去重 /* 核心算法:遍历一遍原先的数组,检查这个值在新数组中是否存在,indexOf返回值-1返回-1则将该数加到新数组里 */ function unique(arr){ var

    89010

    【OpenHarmony】TypeScript 语法 ② ( 基础数据类型 | 布尔类型 | 数字类型 | 字符串类型 | 数组类型 | 元组类型 | 枚举类型 | 未知类型 | 联合类型 )

    TypeScript 代码 : 4、数组类型 TypeScript 中的 数组类型 有两种表示方法 : 使用 数据类型后加上 [] 表示数组类型 , 如 : string[] 字符串数组类型 ; 使用...Array 表示数组类型 , 如 : Array 数字数组类型 ; 代码示例 : // 数组类型 let arr1: string[] = ['Tom', 'Jerry'...] let arr2: Array = [18, 12] // 控制台打印上述变量 console.log("arr1 : " + arr1 + " , arr2 : " + arr2...TypeScript 中的 空类型 使用 void 表示 , 通常用于描述 函数返回值 , 当函数没有返回值的时候 , 就会返回 void 类型 ; 代码示例 : // unknown 类型 function...TypeScript 代码 : [LOG]: "void 类型示例" 9、null 空类型 TypeScript 中的 null 空类型 表示一个空的对象值 , 值就是 null ; 代码示例 :

    32610

    javascript 数组的深复制和浅复制

    这段时间忙的我是欲仙欲死,导致公众号断更了好几天。 但收获也是巨大的,对于JS的一些应用有了一些新的理解,以后我慢慢写出来。 今天简单的写一个javascript里数组的深复制和浅复制。...首先通过for循环,给arr数组添加了内容, 然后声明变量arr2并把arr的值赋给它, 这看起来像是复制了一个数组, 毕竟console.log打印出来的值, 显示arr和arr2的值是一样的, 但这是一种假象..., 其实这只是给数组arr添加了一个引用而已, 你对原数组的操作,会在新数组上引起相同的反应。...先声明一个函数:copyArr,它有二个参数,oldArr, newArr, 分别是旧数组和新数组, 然后声明一个变量arr2 在函数中是通过for循环,将arr1的每一项都赋值给新数组arr2, 然后修改...arr1的值, 再把arr1和arr2的值,都打印出来, 会发现新数组的值并没有被修改, 这说明这二个数组已经完全没有关联了。

    1.3K50

    深入理解JavaScript ES8的新特性

    深入理解JavaScript ES8的新特性 摘要 作为猫头虎博主,我将带您深入研究JavaScript ES8的新特性,探索这些功能如何改进了JavaScript编程体验。...本文将介绍ES8中引入的关键特性,包括异步/等待、对象和数组操作、Rest/Spread操作符等,为您提供全面的指南,以帮助您更好地利用现代JavaScript编程。...Rest/Spread操作符 Rest和Spread操作符是ES8中引入的强大工具,用于处理函数参数和数组/对象。我们将详细解释它们的用途,并演示如何在不同情境下使用它们。...const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const combinedArray = [...arr1, ...arr2]; 总结 JavaScript...ES8的新特性为现代JavaScript编程带来了许多便利。

    23510

    JS对象和数组

    一  JS对象      在JS中一切事物都是对象,字符串,数值,数组,函数      对象中包含属性和方法 对象的属性既可以存放基本数据类型也可以存放其他对象的引用值或者函数的引用值,如果存储的是函数的的引用值则该属性称为方法...alert(arr1); //结果:空 alert(arr2); //结果为苹果,葡萄,香蕉,桔子 alert(arr3) //结果为,,,,...删除顶端的元素 shift方法: 在数组顶端添加元素 unshift方法:返回值为新数组的长度,但不建议使用,IE会出错。...alert(typeof(str)) //结果 数组逆序reverse:颠倒数组元素的顺序;返回值为逆序后的新数组。...正值表示第一个值大于第二个值,负值反之,零则相等。 扩充数组 concat:将多个数组的元素合并为一个新的数组。

    7.3K20

    JS拷贝指南:浅拷贝与深拷贝详解

    在JavaScript编程中,数据的复制是一个基础而又至关重要的概念,尤其在处理复杂的数据结构时,正确地执行拷贝操作可以避免意料之外的数据修改问题。...JavaScript中的数据类型分为基本类型(如number、string、boolean等)和引用类型(如object、array、function等)。...浅拷贝:表面的复制 浅拷贝创建一个新的对象或数组,但它仅复制第一层的元素或属性,如果这些元素或属性是引用类型,则新旧对象将共享同一份引用。这意味着对拷贝后对象中引用类型属性的修改会影响到原对象。...、slice、解构赋值: 如 [].concat(arr) 、arr.slice(0)、 […arr] , 这三个方法都会返回一个新的数组,[].concat(arr) 通过与空数组连接,arr.slice...因此,复制后的对象中的BigInt值不再是BigInt,而是字符串。

    33810

    高阶函数详解与实战训练

    下面是一些内置高阶函数的具体说明讲解,以及和不使用高阶函数情况下的对比 Array.prototype.map map()(映射)方法最后生成一个新数组,不改变原始数组的值。...因为,传一个完整函数进去,有形参,有返回值。这样就不会造成因为参数传入错误而造成结果错误了,最后返回一个经纯函数处理过的新数组。...Array.prototype.reduce reduce() 方法对数组中的每个元素执行一个提供的 reducer 函数(升序执行),将其结果汇总为单个返回值。...在没有初始值的空数组上调用 reduce 将报错。...如果为false则失败,其返回值是一个新数组,由通过测试为true的所有元素组成,如果没有任何数组元素通过测试,则返回空数组。

    70210

    【達達前端】JavaScript Array 對象

    file 作者 | Jeskson 来源 | 达达前端小酒馆 JavaScript array 對象 array對象,是用於在單個變量中存儲多個值的一種變量類型。...,返回的是數組類型,length字段是size的值,參數 element0, element1, ..., elementn ,表示參數列表,新創建數組的元素就會被初始化為這些元素值。...,並返回新的長度 reverse()方法 顛倒數組中的元素順序 shift()方法 刪除並返回數組的第一個元素 valueOf()方法 返回數組對象的原始值 unshift()方法 向數組的開頭添加一個或多個元素...,arr3)) 结果: a,b,c,d,e,f JavaScript 中的join()方法 join()方法用于把数组中的所有元素放入一个字符串中。...arrr.shift(); // 2 valueOf方法返回array对象的原始值 arrayObject.valueOf() unshift() 方法向数组的开头添加一个或多个元素,并返回新的长度

    33920

    JavaScript深拷贝和浅拷贝

    在JavaScript中操作数据的时候,基础数据类型还好,不管是我们怎么赋值修改都不会有什么问题,但是如果我们操作的是数组或者Object,那很容易出现修改了一个值就会把所有的都给变了,这就是浅拷贝。...= [0]; var arr2 = arr1; arr2[0] = 5; console.log(arr1); console.log(arr2); 我们明明想只是修改对象或者数组中的另一个,为什么两个都改变了...如果是数组,那么我们用slice和concat函数,这两个函数都会返回一个新的数组,而参数只要不设置,返回的就是原本的数组。...= [0]; var arr2 = arr1.concat(); arr2[0] = 5; console.log(arr1); console.log(arr2); 输出的都是原来数组的。...在我认为,这两个方法是最简单的数组深拷贝方法,当然也可以循环赋值一个新的数组,跟下面对象一样。 如果是对象,那我推荐转成字符串然后再转回对象。

    56710

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券