一个对象到底是什么? [JavaScript]

时间:2019-04-23 22:16:40

标签: javascript function object ecmascript-6

我已经在MDN上了解到对象是具有属性和方法的东西,并且JavaScript中的几乎所有东西都可以被视为对象。上一句中提到的所有内容都很难区分对象是什么。一些文章说对象只是数据容器,而另一些文章说对象是关于要在代码中使用的东西的整洁的信息包。是唯一的对象:数组,对象文字和函数吗?

let objectLiteral = {

} ;


let exFunction = () = > {

}


let arr = [

] ;

3 个答案:

答案 0 :(得分:0)

当您想要具有多种类型的对象时,对象很有用。 例如,如果您想获得有关某人或联系人的信息, 如果没有对象,则需要将信息存储为:

const name = 'John';
const age = 32;
const lastName = 'John Doe'
const zips = [1, 2, 3, 4]

但是,对象使您可以将所有这些属性归为一种类型 例如:

const person = {
  name: 'John',
  age: 32,
  lastName: 'Doe'
  zips : [1, 2, 3, 4]
};

console.log(person.name) 

对象可以存储任何类型的任何东西。我希望这有帮助。

答案 1 :(得分:0)

JavaScript对象是一个“名称:值”对。当您的网络浏览器与网络服务器进行通信时,两者很有可能通过使用JSON(JavaScript Object 表示法)

的HTTP进行通信。

假设您正在查看自己的Facebook个人资料,当您单击个人资料详细信息时,您会请求一个页面,facebook服务器将为您提供一个可能如下所示的对象:


{
  name: "iamlearningtocode"
  occupation: "student programmer"
  hobbies: "programming"
}

然后通过JavaScript的功能运行代码,以获取该信息并将其以整洁的顺序显示在页面上。希望这有道理!

答案 2 :(得分:0)

对象是一种复杂的数据类型,它存储值并允许使用特定的键对其进行访问。对象内部的键/值组合称为属性。

JavaScript是一种面向对象的编程语言。这意味着几乎每个值都是一个对象。某些类型的值称为 primitives ,它们被视为简单数据类型的“基础”。这些原语是字符串,数字,布尔值,nullundefined
(请注意,除了布尔值nullundefined之外,所有基元也都是秘密对象,因为只有对象才能具有方法-您拥有String.splitNumber.toString等)

还有许多其他数据类型,它们是一种特定的对象:

  • 数组以索引方式存储值,并保证顺序(与对象不同)
  • 函数接收值,执行代码并可能返回值以供以后使用
  • 集合类似于数组,但仅存储唯一值

然而,对象文字是许多人在想到“对象”时所想到的。看起来像这样:

const myObject = {
  name: "Jack",
  cool: false,
  friends: 0
  pets: ["Dog", "Cat", "Snake"]
};

您可以看到对象属性的格式为key: value,如果还有更多属性,则以逗号,(在ES6中,允许尾随逗号)。

对象还可以包含方法

const myObject = {
  name: "Jack",
  sayHello: function() {
    console.log(`Hello, my name is ${this.name}!`);
  }
};

注意:在对象中创建方法时,最高级的功能(在这种情况下,是sayHello之后的部分),必须 ES5样式的功能,以便对this的引用正常运行。如果嵌套函数(例如setTimeout)也需要引用该对象,则它们必须是ES6样式的函数,因为箭头函数(=>)不携带自己的this绑定。

还可以使用构造函数(ES5)或类(ES6)构造对象。

构造函数必须是ES5函数,并在其中分配所有属性(通常是通过传递的参数):

function MyObject(name, cool) {
  this.name = name;
  this.cool = cool;
}

var jack = new MyObject("Jack", false);
var bob = new MyObject("Bob", true);

console.log(jack);
console.log(bob);
.as-console-wrapper { max-height: 100% !important; top: auto; }

要将方法附加到新对象,可以将它们附加到构造函数的prototype

function MyObject(name, cool) {
  this.name = name;
  this.cool = cool;
}

MyObject.prototype.sayHello = function() {
  console.log(`Hello, I am ${this.name}`);
};

var jack = new MyObject("Jack", false);
var bob = new MyObject("Bob", true);

jack.sayHello();
bob.sayHello();

ES6类是构造函数的重新设计。您有一个constructor函数,您可以在其中定义所有属性,并将所有其他方法放在同一位置。这是我们的MyObject构造函数,已转换为ES6类:

class MyObject {
  constructor(name, cool) {
    this.name = name;
    this.cool = cool;
  }
  sayHello() {
    console.log(`Hello, I am ${this.name}`);
  }
}

let jack = new MyObject("Jack", false);
let bob = new MyObject("Bob", true);

jack.sayHello();
bob.sayHello();

您还可以将对象放入其他数据容器中,例如对象和数组。如果将对象放置在对象内,则有一个嵌套对象

const parent = {
  nested: {
    value: "I am nested"
  }
};

console.log(parent.nested.value);

如上所述,您可以通过使用点符号来访问对象的不同属性和方法。但是,如果您有一个要获取的属性,但属性名称存储在变量中怎么办?您需要使用动态属性符号,也称为方括号符号(因为它涉及方括号[]):

const obj = {
  aReallyObscureKey: "Hello!"
};

const key = "aReallyObscureKey";

console.log(obj[key]);

数组还可以容纳对象:

const arrayOfObjects = [{
  name: "Jack",
  cool: false
}, {
  name: "Bob",
  cool: true
}];

console.log(arrayOfObjects);
.as-console-wrapper { max-height: 100% !important; top: auto; }

希望这会有所帮助。以下是一些链接,可帮助您了解有关对象的更多信息: