js值的类型和函数传参

javascript中所有函数的参数都是按值传递的!

由于js中的值分为基本类型值引用类型值,所以才会出现函数对外部值改变情况的不同。

基本类型值指简单的数据段,而引用类型值指那些可能由多个值构成的对象。

5种基本类型(Undefined  Null  String  Number  Boolean)是按值访问的,可以操作保存在变量中的实际的值;

引用类型的值是保存在内存中的对象,javascript不允许用户直接访问内存中的位置,在操作对象时,实际上是在操作对象的引用而不是实际的对象,因此,引用类型的值是按引用访问的。

复制变量值的时候,基本类型直接将值复制一份,引用类型值也会将自己的值复制一份,只是它自己和复制的副本,都是一个指向内存中对象的指针。

因此,函数的参数都是按值传递的,只是这个值,本身就有实际值与指针之分。

现在来理解这句话:JavaScript 的字符串是不可变的!String 类定义的方法都不能改变字符串的内容。像 String.toUpperCase() 这样的方法,返回的是全新的字符串,而不是修改原始字符串。

因为String在js中是基本数据类型,所以在函数调用时,传递的是复制的值,而改变的也是这个复制后的值,跟原先的值还在那里。

原文地址:https://www.cnblogs.com/babywhale/p/4597372.html