В моем коде есть переменная, которая иногда является одним из:Как проверить, является ли переменная объектом без собственных свойств, определенных разработчиком?
- число,
- булево,
- строка,
- регулярное выражение,
- дата,
- объект с 0 или более "собственный" Недвижимость.
Я хочу проверить, является ли эта переменная "элементарный объект". Я определяю "элементарный объект" либо как:
- число,
- булево,
- строка,
- регулярное выражение,
- дата,
или, другими словами, объект без «собственный» свойства, определенные develo пер.
Я использовал условие Object.getOwnPropertyNames(obj).length === 0
но строки (которые, согласно приведенному выше определению, являются «элементарные объекты») имеют «собственного» свойства для каждого символа и для длины строки. Например, если я запустил Object.getOwnPropertyNames("test")
в Chrome (46.0.2490.86 (64-разрядный) на Ubuntu 15.10) Консоль DevTools и Firefox 42 на Ubuntu 15.10, он печатает ["0", "1", "2", "3", "length"]
(в Chrome) и [ "length", "0", "1", "2", "3" ]
(в Firefox).
Итак, что является наиболее читаемым способом проверить, является ли переменная «элементарным объектом» в качестве объяснения выше? Меня не интересует производительность, а читаемость и легкость отладки.
спасибо! :-)
Update:
Я начал использовать эту функцию, хотя я надеюсь, что кто-то даст мне решение, которое совместимо с новыми типами без каких-либо изменений.
function isElementaryValue(x) {
return typeof x === "number" ||
typeof x === "boolean" ||
typeof x === "string" ||
x instanceof RegExp ||
x instanceof Date;
}
Числа, булевы и строки обычно отсутствуют объекты? – Bergi
Вместо этого вы можете попробовать 'Object.keys', который учитывает только перечисленные свойства – Bergi
@Bergi, как в Firefox, так и в Chrome,' Object.keys («test») 'возвращает' ["0", "1", "2" , "3"] ', поэтому мне это не полезно. Чтобы быть полезным для меня, он должен возвращать пустой массив. – silviubogan