Как стать автором
Обновить

Null в JavaScript: объект или примитив

Уровень сложности Простой
Перевод
Ожидает приглашения

Nullодин из семи примитивных типов данных в JavaScript (остальные —строки, числа, булевые значения, undefined, BigInt и Symbol).

И только для типа null проверка typeof возвращает объект. Значит ли это, что null — объект? Нет
Null все-таки примитив. История с типом — баг при создании JavaScript.

Так как же он работает?

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

Таких тегов было 5:

000 — объект
1  — целое число
010 — double (дробное число)
100 — строка
110 — boolean

То есть теги занимали три первых бита в 32-битной ячейке (и один бит в случает целых чисел).

У типа null не было своего отдельного тега. При этом, значение null хранится в памяти в виде нуля (0000, т.е. во всех отведенных под значение битах — нули).

А мы помним, что если у нас в начале значения 000, то программа воспринимает их как тег объекта. Вот и получается такой баг, который разработчики признали, но решили не менять, т.к. это может поломать все уже существующие программы.

Источники:
The history of “typeof null” (большинство информации отсюда), A quick and thorough guide to ‘null’

Читать далее

Сколько в 2023 году стоят деньги частных инвесторов?

Уровень сложности Простой
Ожидает приглашения

Хотите привлечь инвестиции в свой бизнес, но не знаете какую доходность предложить инвестору и как ее посчитать? – Разобрал этот вопрос на примере реального проекта в статье.

Читать далее

1С Документооборот: Проверка вложений на расширение файлов

Уровень сложности Простой
Ожидает приглашения

1С Документооборот - настройка проверки на этапе обработки на наличие файла с нужным расширением без доработки, только в режиме предприятия.

Читать далее

А где же звук, или почему дистрибутив Ubuntu может не звучать «из коробки»

Уровень сложности Простой
Ожидает приглашения

Данная статья написана в помощь пользователям Ubuntu (Lu.., Xu.., Ku.. и прочих derivatives) которые столкнулись с отсутствием звука или проблемами с другим оборудованием на достаточно свежем «железе». Это статья не перевод, а попытка обобщить и показать путь. Если оборудование есть, оно может должно работать.

Читать далее

Создаём оптимизированные модели внутри Unreal Engine одним плагином

Уровень сложности Простой
Ожидает приглашения

Вам нравится, когда игры мало весят, а крутая графика не отнимает слишком много времени у процессора? Мне тоже :)

Процедурная генерация в играх может применяться не только для создания однотипных данжей и квестов. Пример .kkrieger показывает, что сгенерировать можно буквально весь визуал полноценной 3D(!) игры.

Читать далее

Золото, машины и доллары

Уровень сложности Средний
Ожидает приглашения

В России цены на машины продолжают расти, а заработные платы не успевают за этом ростом. Можно ли купить какой-то актив: доллары, юани, золото, чтобы в перспективе нескольких лет или даже десятилетий зафиксировать свой доход или даже заработать хорошие проценты. В этой статье попробуем разобраться, что бы Вы смогли купить в 2023 году, если бы отложили годовую зарплату в 2000г.

Для объективности будем рассматривать один конкретный товар - машину, внедорожник, и два средства сбережения и обмена - доллары и золото. Для начала стоит привести график инфляции доллара за 2000-2023 года:

Читать далее

Обзор библиотеки vue3-picture-input

Уровень сложности Средний
Ожидает приглашения

Если вы ищите простые решения, для того чтобы создать input для картинок. А такие решения как Dropzone слишком избыточны в функционале, то данная библиотека прекрасно вам подойдет.

Читать далее

Быстрый старт в Java. Терминал и Java

Уровень сложности Простой
Ожидает приглашения

В современном мире большинство программистов используют интегрированные среды разработки (IDE), которые предоставляют широкий набор функций и инструментов для создания, отладки и тестирования кода. Однако, не все разработчики умеют работать с терминалом, который также является важным инструментом для запуска и тестирования кода. В данной статье мы поговорим о том, как установить Java, попытаемся найти разницу между OpenJDK и OracleJDK, научимся компилировать, собирать jar-файлы, писать самостоятельно MANIFEST.mf и дебажить свой код в терминале.

Читать далее

Создание простой Roblox игры без особого знания Lua

Уровень сложности Простой
Ожидает приглашения

Если вы когда-либо мечтали создать свою собственную игру в Roblox, но не знаете с чего начать, то эта статья для вас. В этом руководстве я покажу вам, как создать игру в Roblox без базового знания программирования.

Прежде чем мы начнем, вам нужно зарегистрироваться на сайте roblox.com и загрузить Roblox Studio - инструмент, который позволяет создавать игры на платформе Roblox. После установки запустите программу и выберите пустой шаблон для создания новой игры.

Читать далее

Telegram бот для отслеживания позиции в очереди на 2b2t

Уровень сложности Простой
Ожидает приглашения

Данный бот поможет отслеживать свою позицию в очереди на 2b2t удаленно от ПК.

На сервере существует очередь, в некоторые моменты, достигающая порядка 1000 человек, а время ожидания в ней может доходить до 12 часов. В такие моменты очень удобен бот, который будет отсылать вам позицию в очереди когда вы находитесь вне дома.

Бот реализован на языке python, с использованием библиотеки telebot. Данная библиотека позволяет осуществлять управление telegram ботом.

Читать далее

golang: один источник и один выборочный получатель из нескольких

Уровень сложности Простой
Ожидает приглашения

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

В языке go есть такая конструкция:

Читать далее

Создание спецификации ASP.NET Core OpenAPI во время сборки

Ожидает приглашения

Необходимо создать локальный манифест инструмента для того чтобы проект мог вызывать инструментарий CLI Swashbuckle из контекста нашего решения. Для этого мы сначала запустим команду .NET CLI

Читать далее

Samsung с точки зрения фаната Xiaomi

Уровень сложности Простой
Ожидает приглашения

Спецификации устройств:

Samsung Galaxy s22 Ultra 5g, SM-908O (Hong Kong) под управлением OneUI 5.0 (Build Number: S9080ZHS2BWA2) и Android 13

Xiaomi mi note 10 Pro (он же cc9 Pro) под управлением MIUI 13.0.3 Стабильная (RFDRUXM) и Android 11

Читать далее

15 удобных плагинов и горячих клавиш PyCharm для начинающих питонистов

Ожидает приглашения

Привет коллеги-профессионалы и только начинающие в удивительном мире программирования! Собрал для вас материал, который однозначно поднимет в ваших глазах среду разработки PyCharm и самое главное облегчит жизнь, особенно если вы начинающий в программировании. Поехали!

Читать далее

Защита от повторного запроса с помощью БД

Уровень сложности Простой
Ожидает приглашения

Если вы разрабатываете Веб-приложение или REST-сервис, то рано или поздно столкнётесь с повторными запросами. Что имеется в виду? Объясню на примере Веб-страницы с кнопкой. По нажатию на кнопку, на бэкенд отправляется запрос. Запрос, соответственно, синхронный и пока серверная часть делает какую-то работу, браузер клиента показывает, что загружает страницу. Если это происходит продолжительное время, клиент может подумать, что его запрос завис и нажать кнопку ещё раз. Также повторное нажатие может произойти случайно.

Какая тут может произойти проблема? Если это, например, какой-то запрос данных, то в общем-то проблемы и нет, но если это действие, которое должно отработать только один раз, то тут могут быть весьма неприятные последствия. Для примера в интернет-магазине собрана корзина и создан заказ на оплату (статус REGISTERED), далее по нажатию кнопки "оплатить" с клиента списывают деньги и переводят заказ в статус оплачен (PAID). И если в этом процессе произойдёт двойной запрос, то с клиента могут списать деньги за заказ два раза.

Читать далее

Очередь с приоритетами на С++ с использованием динамической кучи (heap) минимумов (максимумов) и шаблонов (template)

Уровень сложности Простой
Ожидает приглашения

Содержание

1. Введение в структуру данных - куча

1.1. Возможности кучи

1.2. Описание структуры данных — куча

1.3. Базовая реализация кучи минимумов с помощью вектора

2. Работа кучи с разными типами данных

2.1. Применение шаблонов С++ для настройки кучи на работу с разными типами данных

2.2. Определения оператора сравнения в пользовательском типе данных для работы с кучей

2.3. Превращение кучи минимумов в кучу максимумов без изменения кода кучи, используя оператор сравнения в пользовательском типе данных

3. Использование оператора сравнения в пользовательском типе данных для решения более сложных задач с помощью кучи

4. Использование для реализации кучи указателей

Читать далее

Предел. Что нас ждет

Уровень сложности Простой
Ожидает приглашения

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

Читать рассказ

10 правил партнерства в IT-проектах или чему меня научили 17 лет предпринимательского опыта

Ожидает приглашения

Всем привет! Меня зовут Бекзод Камилов, и я вместе с партнерами запускаю проекты в разных нишах. В этом лонгриде решил поделиться правилами, которые я вывел за 17 лет работы в команде.

Читать далее

Великий Г-цессор (Как Р-фон, но процессор), часть 1

Уровень сложности Простой
Ожидает приглашения

Немного предыстории. Находясь в поездке я узнал о новейшей разработке супер российского смартфона "Р-фон", а так как делать в тот момент мне было особо нечего я развлекался написанием скриптов на языке Пайтон. И решив, что хуже точно не будет я накатил себе Icarus Verilog на Termux, после чего стал писать свой очередной процессор, так как исходники других моих проектов мне были не доступны.

В итоге это дошло до такого результата...

Читать далее