【问题标题】:The difference between object and plain object in JavaScript?JavaScript 中对象和普通对象的区别?
【发布时间】:2019-02-26 10:26:24
【问题描述】:

无法理解 JavaScript 中对象和普通对象之间的区别。

我知道 Object 的样子,但不了解普通的 object。我在谷歌上搜索过,但无法理解。

根据我的理解,普通对象如下所示

const object = {};

或者我们在 JavaScript 中将函数调用为对象

function test() {

}

但是什么是普通对象?它与普通物体有何不同。谢谢

编辑:

在查看以下错误后,我开始对普通对象感到困惑。所以我的查询是了解 JavaScript 中普通对象的概念

动作必须是普通对象。使用自定义中间件进行异步操作。

【问题讨论】:

  • Javascript 中没有“普通对象”这样的东西。您在哪里听到“普通对象”一词。您所写的内容称为“对象文字”。告诉我在 Javascript 规范中使用术语“普通对象”的地方。
  • @mpm 我对普通对象的怀疑始于此错误“操作必须是普通对象。使用自定义中间件进行异步操作。”
  • @Think-Twice 看起来您正在使用 redux。在 redux 中,没有任何额外的中间件,动作数据必须是一个普通的对象。看起来您正在返回一个函数,您需要 thunk 中间件来处理它。默认情况下,redux 只是寻找一个对象——thunk 中间件添加了可以调用函数的附加功能。
  • @Ryan 这就是我卡住的地方。 thunk 期望的普通对象是什么?我希望 thunk 必须使用 JavaScript 普通对象的概念?
  • @Think-Twice thunk 中间件不需要普通对象。 plain redux 只允许普通对象,thunk 增加了对函数作为返回类型的支持。如果您打算只返回普通对象,则不需要 thunk。如果你打算返回一个你需要 thunk 的函数。 thunk 中间件对于调度驱动的流程很有用。因为你甚至不知道对象和函数之类的 JS 基础知识,所以我建议尝试在不使用 redux 的情况下学习 react。现在只使用组件本地状态 - DELETE REDUX。

标签: javascript javascript-objects


【解决方案1】:

我认为您想将 Plain Old JavaScript Object 表示为普通对象。

在 vanilla JavaScript 中,POJO(普通旧 JavaScript 对象)是您可能拥有的最简单类型的对象:一组键值对,由 {} 对象文字符号创建或使用 new Object() 构造。

普通的旧 JavaScript 对象:

使用括号的语法糖也称为对象字面量:

var obj = {};

使用 Object() 构造函数:

var obj = new Object();

普通对象以外:

使用函数构造函数:

var Obj = function(name) {
  this.name = name;
}
var c = new Obj("hello"); 

使用 ES6 类语法:

class myObject  {
  constructor(name) {
    this.name = name;
  }
}
var e = new myObject("hello");

【讨论】:

    【解决方案2】:

    普通对象(PO​​JO - 普通旧 Javascript 对象)

    var plainObj1 = {}; // typeof plainObj1 --> Object
    var plainObj2 = {name : "myName"}; // typeof plainObj2 --> Object
    var plainObj3 = new Object(); // typeof plainObj3 --> Object
    

    非普通对象

    var Person = function(){}; //class
    var nonPlainObj = new Person(); // typeof nonPlainObj --> function
    

    【讨论】:

    • 您好,在“非普通对象”示例中,第一行“var Person = function(){}; //class”
    【解决方案3】:

    由文字符号或新对象创建的对象称为普通对象。示例:

    let a = {aaa : 1}
    
    let b = new Object()
    

    虽然使用函数创建的对象不是普通对象

    let C = function(){}
    
    let d = new C()
    

    【讨论】:

      【解决方案4】:

      您在谈论对象文字,它是文字对象,{}。像数组文字一样使用[] 而不是new Array()。这是一个原型为 Object 的对象。字符串也是一个对象,但它的原型链看起来像:字符串 -> 对象。数组是数组 -> 对象。这些都是对象。

      对象字面量的原型就是对象。

      【讨论】:

        【解决方案5】:

        使用对象字面量表示法创建的任何对象在 JavaScript 中都称为普通对象

        function Animal(){
        //Some codes
        }
        var obj = new Animal();
        

        【讨论】:

          【解决方案6】:

          在您的问题中,您引用您认为对象文字和函数都是“对象”。在 JS 中,函数是一种类型,对象也是。所以你原来的问题,这两个项目不是对象......

          【讨论】:

            【解决方案7】:

            普通对象(包含在 { } 中的键/值对集)非常适合存储简单的数据集。

            var lunch={
                sandwich:'furkey',
                drink:'soda',
                chips:true
            }
            

            就像在 react redux 中一样,动作是用键/值对编写的。

            希望你能理解。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-09-06
              • 2017-07-08
              • 1970-01-01
              • 1970-01-01
              • 2017-04-02
              • 1970-01-01
              • 2014-09-08
              • 2015-05-10
              相关资源
              最近更新 更多