Javascript中的原始值与非原始值?

605 阅读3分钟

[

Ayush Tibra

](medium.com/@aayushtibr…)

Ayush Tibra

关注

6月7日

-

3分钟阅读

[

拯救

](medium.com/m/signin?ac…)

Javascript中的原始值与非原始值?

JS中的原始值和非原始值(对象引用)之间有什么区别?

照片:Mohammad RahmanionUnsplash

如果你正在面试一个前端开发的职位,很有可能会被问到这个问题。

那么这些到底是什么呢?

为了理解这个问题,我们需要知道Javascript中存在多少种不同的数据类型

**The latest ECMAScript standard defines eight data types:**
  1. 字符串
  2. 布尔型
  3. 数字型
  4. BigInt
  5. 空值
  6. 未定义
  7. 符号
  8. 对象

注意:数组不属于这个列表,因为它们也是对象。这在开发者中是一个常见的混淆,他们认为数组是Javascript中的一种特殊数据类型。

现在,这些数据类型大致分为两种类型。

  • 原始数据:(字符串、布尔值、数字、大Int、空、未定义、符号)。
  • 原生型:--对象(数组、函数),也叫对象引用。

基元和非基元的根本区别在于,基元是immutable ,非基元是mutable

  • 可变的值是那些在创建后可以被修改的值。
  • 不可变的值是那些在创建后不能被修改的值。

基元被称为不可变的数据类型,因为一旦基元被创建,就没有办法改变它。
例子1:-

基元是不可变的(不能直接改变)

需要注意的是,在上面的例子中,存储了基元值的变量可以被重新分配到一个新的值,但现有的值不能被改变,如下图所示

基元值是不可改变的

A primitive value can be replaced, but it can’t be directly altered.

其次,Primitive通过值进行比较。如果两个值相同,则严格来说是相等的。

const example1 = 'This is a test string';const example2 = 'This is a test string';

原始值被称为mutable 数据类型,因为我们可以在创建后改变值。

非原始值是可变的

正如你在上面的例子中看到的,我们可以在创建后改变数组。

其次,对象不是通过值来比较的,它们是通过reference

例如,如果两个对象有相同的键值对,它们并不严格等同。数组也是如此。即使它们有相同的元素,而且顺序相同,它们也不是严格相等的。

对象通过引用而非值进行比较

两个对象只有在引用相同的底层对象时才是严格相等的。

例子:-

let obj1 = {name: 'test', city: 'Jaipur'}let obj3 = obj1;

区别和总结

  • 原始值是不可变的
  • 原始值通过值进行比较
  • 非原始值是可变的
  • 非原始值通过引用而非值进行比较

请在评论区分享您的观点,感谢您的反馈。
希望你会喜欢并分享这篇文章,以便更好地达到
,请查看我的其他文章---
-。 https://medium.com/@aayushtibra1997***
谢谢你的阅读 :)***