2016-08-23 1 views
0

В W3school я увидел следующие утверждения.Путаница в отношении типа данных и типов данных JavaScript

enter image description here

Я пришел от начинающего Java фона, поэтому типы данных и типы объектов в JavaScript путают меня совсем немного. У меня есть несколько вопросов:

  1. Что означает тип данных «объект»?
  2. В чем разница между типом данных «объект» и типами объектов «Объект»?
  3. Когда я попытался выяснить тип данных «null», набрав typeof null, моя IDE сообщает мне, что это тип «объект», а не тип «null», что я и ожидал.
+3

Я думаю, что информация сбивает с толку, если не совсем неправильно. Функции также являются объектами. И здесь есть много других объектов: Number, String, RegExp ... –

+4

«Я видел следующие заявления в W3school». --- первое правило, не используйте w3schools. Никогда. **НИКОГДА**. – zerkms

+0

Попробуйте [MDN docs] (https://developer.mozilla.org/en/docs/Web/JavaScript/Data_structures). – Tigger

ответ

1

typeof всегда будет возвращать примитивный тип. («строка», «число», «объект» и т. д.).

Объект представляет собой примитивную структуру типов, неупорядоченный список примитивных типов данных, хранящихся в виде пары пар имя-значение.

Object - конструктор примитива объекта.

var test = {}; 
console.log(typeof test);    // object 
console.log(test instanceof object) // false 
console.log(test instanceof Object) // true 

В соответствии с этим, чтобы проверить дату или массив, используя typeof воли возвращает object:

typeof [];   // object 
typeof new Date(); // object 

Чтобы проверить, является ли объект на самом деле дата или массив, вы можете использовать instanceof :

[] instanceof Array;   // true 
new Date() instanceof Date; // true 

что касается typeof null, это ошибка в ECMAScript согласно the MDN и должен быть нулевым. Ошибка описана в this answer. A fix был предложен через отказ, к сожалению, изменение было отклонено из-за кода с использованием этой конкретной «ошибки» для проверки на null.

1

W3Schools (не ошибиться с W3C (World Wide Web Consortium)) часто содержит очень неточную информацию. Discussion: Why not w3schools.com. Вместо этого используйте информацию, предоставленную MDN, например.

Вот статья о типах данных в JavaScript, вы найдете полезную: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures

Чтобы ответить на ваши вопросы:

объекты являются лишь набор свойств: комбинации между ключом (строка, число, объекты ...) и значение: другие объекты, функции, строки, числа, ... Массивы (у которых есть некоторые пользовательские вещи, такие как индексация и т. д.), а Даты - это объекты.

Объекта и объекта нет.

Причина, по которой typeof null возвращает объект из-за старых спецификаций, которые никогда не менялись. Why is typeof null “object”?

+0

«W3School не является официальным источником» --- чтобы быть честным, MDN никоим образом не является «официальным источником». Только стандарт. – zerkms

+0

@zerkms. Вы правы, я обновлю ответ. –

Смежные вопросы