Что именно является объектом? [JavaScript]

#javascript #function #object #ecmascript-6

#javascript #функция #объект #ecmascript-6

Вопрос:

Я узнал на MDN, что объект — это нечто со свойствами и методом, и что в основном все в JavaScript является / может рассматриваться как объект. Все, что упоминалось в предыдущем предложении, затрудняет определение того, что такое объект. В некоторых статьях говорится, что объекты — это просто контейнеры данных, в других говорится, что объекты — это аккуратные пакеты информации о чем-то, что вы хотите использовать в своем коде. Являются ли единственными объектами: массивы, объектные литералы и функции?

 let objectLiteral = {

} ;


let exFunction = () = > {

}


let arr = [

] ;  

Комментарии:

1. Да, почти все значения в JavaScript являются объектами. Да, объекты могут быть контейнерами данных. Да, объекты могут быть аккуратными пакетами информации. Массивы — это особый вид объекта, который может быть инициализирован с помощью [...] синтаксиса. Функции — это особый вид объекта, который может вызываться с fn() синтаксисом и объявляется также со своим собственным специальным синтаксисом. Существуют особые случаи, такие undefined как, которые не являются объектами, массивами или функциями

Ответ №1:

Объект — это сложный тип данных, который хранит значения и позволяет получить к ним доступ с помощью определенного ключа. Комбинация ключ / значение внутри объекта называется свойством.

JavaScript — это объектно-ориентированный язык программирования. Это означает, что почти каждое значение является объектом. Некоторые виды значений называются примитивами, и они рассматриваются как «основа», как простые типы данных. Этими примитивами являются строки, числа, логические значения, null и undefined .
(Обратите внимание, что, кроме логических значений, null и undefined , все примитивы также являются скрытыми объектами, потому что только объекты могут иметь методы — у вас есть String.split , Number.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; }  

Надеюсь, это поможет. Вот несколько ссылок, которые помогут узнать больше об объектах:

Комментарии:

1. Вау! Спасибо за такое замечательное объяснение!

Ответ №2:

Объекты полезны, когда вы хотите иметь что-то из многих типов. Например, если вы хотели бы получить некоторую информацию о человеке или контакте; без объектов вам нужно было бы сохранить информацию как:

 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) 

  

Объекты могут хранить что угодно, любого типа. Я надеюсь, что это поможет.

Ответ №3:

Объект JavaScript — это пара имя: значение. Когда ваш веб-браузер обменивается данными с веб-сервером, более чем вероятно, что они обмениваются данными через HTTP с использованием JSON (обозначение объекта JavaScript)

Допустим, вы просматриваете свой профиль Facebook, при нажатии на детали профиля вы запрашиваете страницу, и сервер facebook предоставит вам объект, который может выглядеть следующим образом:

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

Затем с помощью JavaScript запускается код, который принимает эту информацию и отображает ее на странице в аккуратном порядке. Надеюсь, это имеет смысл!