Подтвердить что ты не робот

Как почти все в Javascript является объектом?

Я читал это много во многих введениях JavaScript. Я просто этого не понимаю. Я всегда думаю о предметах как о чем-то с методами и свойствами. Массивы, которые я понимаю, так как он имеет пару ключевых значений. Как насчет "строк" ​​или "чисел" или "функций"? Эти вещи, перечисленные выше, кажутся мне похожими на функции. Это означает, что вы вводите что-то, вы получаете что-то. Вы действительно не получаете свойства доступа или что-то еще. Там нет точечной нотации, используемой в массивах или в этом списке "объектов".

Кто-нибудь кодирует некоторые примеры каждого из них с точечными нотами, к которым обращаются его методы и свойства? Я подозреваю, что определение объекта, вероятно, ограничено, так как я начал изучать JavaScript...

4b9b3361

Ответ 1

Это верно, в javascript, почти все является объектом. Но эти объекты немного отличаются от того, что мы видим в Java, C++ или других традиционных языках. Объект в JS - это просто хэш-карта с парами ключ-значение. Ключ - это всегда строка, а значением может быть что угодно, включая строки, целые числа, логические значения, функции, другие объекты и т.д. Поэтому я могу создать новый объект, например так:

var obj = {}; // this is not the only way to create an object in JS

и добавьте в него новые пары ключ-значение:

obj['message'] = 'Hello'; // you can always attach new properties to an object externally

или же

obj.message = 'Hello';

Точно так же, если я хочу добавить новую функцию к этому объекту:

obj['showMessage'] = function(){
    alert(this['message']);
}

или же

obj.showMessage = function() {
    alert(this.message);
}

Теперь, когда я вызываю эту функцию, она показывает всплывающее окно с сообщением:

obj.showMessage();

Массивы - это просто те объекты, которые могут содержать списки значений:

var arr = [32, 33, 34, 35]; // one way of creating arrays in JS

Хотя вы всегда можете использовать любой объект для хранения значений, но массивы позволяют хранить их, не связывая ключ с каждым из них. Таким образом, вы можете получить доступ к элементу, используя его индекс:

alert(arr[1]); // this would show 33

Объект массива, как и любой другой объект в JS, имеет свои свойства, такие как:

alert(arr.length); // this would show 4

Для получения более подробной информации, я очень рекомендую методы Javascript John Resig Pro.

Ответ 2

Нет, не все это объект в JavaScript. Многие вещи, с которыми вы регулярно взаимодействуете (строки, числа, булевы), являются примитивами, а не объектами. В отличие от объектов, примитивные значения неизменяемы. Ситуация осложняется тем, что эти примитивы имеют обертки объектов (String, Number и Boolean); эти объекты имеют методы и свойства, в то время как примитивы этого не делают, но примитивы, как представляется, имеют методы, потому что JavaScript молча создает объект-оболочку, когда код пытается получить доступ к любому свойству примитива.

Например, рассмотрим следующий код:

var s = "foo";
var sub = s.substring(1, 2); // sub is now the string "o"

За кулисами s.substring(1, 2) ведет себя так, как будто выполняет следующие (приблизительные) шаги:

  • Создайте обертку String объекта из s, что эквивалентно использованию new String(s)
  • Вызвать метод substring() с соответствующими параметрами в объекте String, возвращаемом шагом 1
  • Устранить объект String
  • Верните строку (примитив) из шага 2.

Следствием этого является то, что, хотя кажется, что вы можете назначать свойства примитивам, это бессмысленно, потому что вы не можете их получить:

var s = "foo";
s.bar = "cheese";
alert(s.bar); // undefined

Это происходит потому, что свойство эффективно определено на объекте String, который немедленно отбрасывается.

И так поступают числа и булевы. Функции, однако, являются полнофункциональными объектами и наследуются от Object (фактически Object.prototype, но это другая тема). Поэтому функции могут выполнять любые объекты, включая свойства:

function foo() {}
foo.bar = "tea";
alert(foo.bar); // tea

Ответ 3

Предложение "В JavaScript, ALMOST все является объектом", является правильным, поскольку кодовые единицы MAIN (объекты, функции, массивы) являются объектами JavaScript.
Код JavaScript использует 9 разных единиц плюс 1 (несколько):
- 01. массив
- 02. boolean
- 03. функция
- 04. null
- 05. номер
- 06. объект
- 07. regexp
- 08. строка
- 09. undefined
- 10. multiple

НО JavaScript-объекты:
- не являются теми же существами, что и "объекты" на других объектно-ориентированных языках.
- они представляют собой набор пар имен и значений.
- у всех есть функция создания (его конструктор).
- все INHERIT - члены прототипа-объекта его конструктора, и это его прототип.
- все функции являются объектами BUT НЕ все объекты являются функциями.
- функции имеют область, объекты НЕ (дефект дизайна, на мой взгляд).
- Объект, функция, массив, строка,... с первым CAPITAL являются функциями!!!
- важнее различия в объектах и ​​функциях JS, чем его обычаи.
- имя "экземпляр" в JS имеет разное значение с именем "экземпляр" в теории знаний, где экземпляр наследует атрибуты его общей концепции. В JS обозначается только его конструктор. JavaScript получил имя "экземпляр" из класса "наследование на основе класса" ool (java), где это подходящее имя, потому что эти объекты наследуют атрибуты классов.
Лучшее имя для JS-ключевого слова "instanceof" - это "objectof".

JS-функции AJS-объекты, потому что:
1) они могут иметь такие элементы, как JS-объекты:

    > function f(){}
    undefined
    > f.s = "a string"
    "a string"
    > f.s
    "a string"

2) они имеют конструктор-функцию, как и все JS-объекты, Function Function:

    > (function f(){}) instanceof Function
    true

3) как все JS-объекты, их прототип-объект одинаков с его прототипом конструктора:

    > (function f(){}).__proto__ === Function.prototype
    true
    > ({}).__proto__ === Object.prototype
    true
    > (new Object).__proto__ === Object.prototype
    true

4), конечно, JS-функции как SPECIFIC JS-objects имеют и дополнительные атрибуты, как и все функции в языках программирования, что JS-объекты не имеют, как вы можете вызывать (исполнять) их с информацией ввода и вывода.

ВСЕ НЕ является объектом, потому что, например, мы НЕ можем добавлять членов в литеральную строку:

    > var s = "string"
    undefined
    > s.s2 = "s2string"
    "s2string"
    > s.s2
    undefined

Ответ 4

Не все является объектом в javaScript. У JavaScript есть примитивы и объекты. Существует шесть примитивов: null, undefined, string, number, boolean и symbol. Может показаться, что все действует как объект из-за свойств и функций, к которым можно получить доступ. For example-

var stringvar="this string";
typeof stringvar; // "string"
stringvar.length; //11

Теперь, так как "stringvar" является строковым типом, который является примитивным типом, он не должен иметь доступ к длине свойства. Это может быть сделано из-за чего-то, называемого Boxing.Boxing - это процесс, в котором любой примитивный тип преобразуется в тип Object. и обратное называется Unboxing. Эти типы объектов или обертки объектов создаются с учетом того, что существуют некоторые общие операции, которые, возможно, потребуется выполнить с примитивными значениями. Они содержат полезные методы и свойства и являются прототипами, связанными с примитивами. Что касается объектов, пары ключ-значение могут быть добавлены к каждому объекту, даже к массивам.

var arr=[1,2,3];
arr.name="my array";
arr;  //[1,2,3,name:'my array']

это не означает, что четвертый элемент массива - это "name: 'my array'". "name" - это свойство, которое можно вызывать с точечной нотацией (arr.name) или в скобках (arr ["name"]),

Ответ 5

На основании developer.mozilla.org, а также спецификации ECMAScript ответ - нет. Технически не все является объектом.

https://developer.mozilla.org/en-US/docs/Glossary/Primitive

В JavaScript примитив (примитивное значение, тип примитива) - это данные, которые не являются объектом и не имеют методов. Существует 7 примитивных типов данных: строка, число, bigint, логическое значение, ноль, неопределенный, символ

Примитив не является объектом и не имеет методов, а также является неизменным. За исключением null и undefined, все остальные примитивы имеют обертывающий объект, чтобы предоставить вам некоторые функции, которые вы можете использовать. Например, String для строкового примитива.

https://developer.mozilla.org/en-US/docs/Glossary/Primitive#Primitive_wrapper_objects_in_JavaScript

Поэтому здесь, в следующем коде, когда вы вызываете toUpperCase() для примитивного name данных, JavaScript автоматически переносит строковый примитив и вызывает функцию toUpperCase объекта String

var name = 'Tom';
console.log(name);

name.toUpperCase();
console.log(name); 

В тех случаях, когда метод должен вызываться для примитивной строки или происходит поиск свойства, JavaScript автоматически переносит строковый примитив и вызывает метод или выполняет поиск свойства.

Также обратите внимание, что JavaScript различает объекты String и значения примитивных строк.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#Distinction_between_string_primitives_and_String_objects

var nameP = 'Tom';
var nameO = new String(nameP);

typeof nameP // "string"
typeof nameO // "object"