对象与原语

Zac*_*ter 23 javascript oop primitive object

最近有一位采访者要求定义对象和原语之间的区别.考虑到所有语言都以原语开头,这似乎是一个奇怪的问题.你怎么回答这个问题?

我还应该注意,这次访谈是针对前端开发的,所以他所指的语言(我假设)是JavaScript.

Mit*_*ran 37

基元是一种数据类型,由其他数据类型组成,不能再进一步细分.它就像编程场景中的原子.我说原子是因为原子是物质的基本单位,没有任何东西可以从中得到.

我的意思是,int在C中不能分解成较小的数据类型.另一方面,物体可以被认为是由多于一种原始类型组成的分子.例如,string作为C++标准库的一部分; 但是,它是一个对象,它由内部较小的数据类型组成,并包含方法.

值得注意的是,并非所有面向对象的语言都是基于类的(例如Javascript)您无法在Javascript中定义类,因此这里的对象完全不同.即使Javascript中的所有内容都是一个对象(Ruby也是如此),Number对象实际上是内部基元的包装器.

  • es6 类只是语法糖:在幕后,它们以与 es6 之前的方式相同的方式创建类。即基于原型的类。这使得它们与大多数语言的类不同。这个区别重要吗?也许在面试中比在现实生活中更频繁:) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes (2认同)

Bhu*_*han 11

Java角度来看:

  1. 基元不是由其他数据类型组成的.作为一个对象的地方可以并且通常是.
  2. 基元按值传递,即传递基元本身的副本.而对于对象,则传递引用的副本,而不是对象本身.
  3. 基元是独立的数据类型,即它们不存在层次/超类.而每个对象都是"对象"类的后代.
  4. 每个对象都有自己的一些默认方法,它从Object类继承(例如toString(),clone(),wait(),notify(),notifyAll()等).原语没有任何与自身相关的方法.
  5. 基元是不可变的,它们可以在没有任何特殊注意的情况下使用.对于对象,需要特别小心,默认情况下它们不是不可变的.
  6. 对于对象,有两种类型的副本,浅和深.它们之间存在显着差异.所以选择取决于我们打算如何使用它们.对于原语,没有这样的差异,一切都是默认的深拷贝.