JavaScript中值类型与引用类型有什么不同

  

JavaScript中值类型与引用类型有什么不同?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强> JavaScript的数据类型分为两类:原始类型和对象类型。强其中,原始类型包括:数字,字符串和布尔值。此外,JavaScript中还有两个特殊的原始值:零和定义,它们既不是数字也不是字符串,更不是布尔值。它们通常分别代表了各自特殊类型的唯一成员.JavaScript中除了数字,字符串,布尔值,零和未定义之外的就是对象了。

<强> JavaScript中值类型和引用类型的区别

<强> JavaScript中的值类型的值是不可变的:

任何方法都无法改变值类型的值。数字,布尔值,零和定义等都属于不可变类型。比如,修改一个数值的内容,本身就说不通。虽然字符串可以被看成是由字符组成的数组,可能会被认为是可变的。但是,在JavaScript中,字符串是不可变的。在实际操作过程中,可以访问字符串任意位置的文,本单JavaScript并未提供修改已知字符串的文本内容的方法。

代码:

var  str =, & # 39;六边形abcdef # 39;;   console.log (str.toUpperCase());//,六边形ABCDEF   console.log (str);,//,六边形abcdef

可见,原始的str字符串值并未发生改变,仍然是小写的六边形abcdef,第二行代码,只是调用了字符串的toUpperCase()方法后,返回的是一个新的字符串。

<强> JavaScript中的引用类型的值是可变的:

代码:

var  student =,{名称:& # 39;张三& # 39;,,年龄:,26个};   console.log (student.name);,//,张三   时间=student.name  & # 39;李四& # 39;;   console.log (student.name);,//,李四

疑问:如果像studen.name=& # 39;李四& # 39;这段代码一样,给str也做相同的操作,str的值不也是改变了吗?

扩展:如果给str重新赋值,那么改变的是变量的值,给str重新赋值了,并没有改变字符串内容,改变的只是变量str的内容

<强> JavaScript中的值类型无法添加属性和方法:

代码:

var  student =, & # 39;张三& # 39;;   student.age =, 26日;   时间=student.run  function  (), {   ,console.log(& # 39;跑步中…& # 39;);   }   console.log (student.age);//,未定义   console.log (student.run);,//,未定义的

通过代码示例,可知,不能给值类型添加属性和方法。从而,也更加说明了值类型是不可变的。

<强> JavaScript中的引用类型可以添加属性和方法:

代码:

var  student =, {};   student.age =, 26日;   时间=student.run  function  (), {   ,console.log(& # 39;跑步中…& # 39;);   }   console.log (student.age);//, 26   console.log (student.run);/*   function  (), {   ,console.log(& # 39;跑步中…& # 39;);   }   */

<>强JavaScript中的值类型的变量是存放在栈区的:

JavaScript中的值类型的变量存储结构如下表模拟所示,栈区中包括了变量的标识符以及变量所对应的值。

 JavaScript中值类型与引用类型有什么不同

<强> JavaScript中的引用类型的变量也是存放在栈区的,不同的是,引用类型在栈区中存放的是变量标识符以及变量所对应值得引用地址,而变量所对应的值被存放在堆区中:

 JavaScript中值类型与引用类型有什么不同

所以,可以看的出,即使两个对象完全一样,但是在堆区中的存放地址是不一样的,所以在比较时,是不相等的。

<强> JavaScript中的值类型的比较是值的比较:

JavaScript中的值类型在进行比较的时候,只有在它们的值相等的时候,它们才相等。注意:比较的时候注意“==焙汀?==?双等号(==)在做比较的时候,做了类型转换,而全等号(===)是值和类型的比较,只有值和类型同时相等时,才能相等。

代码:

var  student1 =, & # 39; {} & # 39;;   var  student2 =, & # 39; {} & # 39;;   console.log (student1 ===,学生二),,//,真正的

两个相同字符串的比较,是值(“{}& # 39;)的比较,完全相等。

<强> JavaScript中的引用类型的比较是引用地址的比较:

代码:

var  student1 =, {};   var  student2 =, {};   console.log (student1 ===,学生二),,//,假

JavaScript中值类型与引用类型有什么不同