I Shar

I Shar

мир глазами веб-разработчика

Нелогичный JavaScript

потому-что такова его природа

I Shar

время чтения 2 мин.

Photo by Andy Brunner on Unsplash

В свое время Дуглас Крокфорд сказал: “JavaScript - самый неправильно понятый язык программирования в мире”.

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

Почему же сообщество разработчиков приняло JavaScript? Ответ лежит на поверхности - у нас просто не было выбора.

Еще одно мудрое высказывание Дугласа Крокфорда гласит: “JavaScript построен на некоторых очень хороших идеях и нескольких очень плохих”.

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

Null является объектом

console.log(typeof null) //Object

В JavaScript null означает “ничто” и является определением чего-то несуществующего. Но, к сожалению, тип данных null это объект.

Исходя из вышеизложенного можно предположить, что null является экземпляром стандартного встроенного объекта Object, но на самом деле это не так:

console.log(null instanceof Object) //returns false

NaN является числом

console.log(typeof NaN) // Number

Ну хорошо. Прекрасно. Значит я могу сделать так:

console.log(NaN === NaN) // Казалось бы должен вернуть true, но это не так.

Так как же проверить, является ли значение NaN. Думаю так:

console.log(isNaN(NaN))

[] не равно []

console.log([] === []) // Должен вернуть true, но возвращает false

Сложение массивов

console.log([1, 2, 3] + [4, 5, 6]) // покажет 1,2,34,5,6 - очень интересный результат

true не равно ![], но так же не равно []

Массив не равен true, но не массив тоже не равен true. Массив равен false, не массив тоже равен false:

true == []; // -> false
true == ![]; // -> false
false == []; // -> true
false == ![]; // -> true

baNaNa

console.log("b" + "a" + + "a" + "a") // результат baNaNa;
console.log("foo" + + "bar");

Undefined может быть defined

var someValue;
console.log(someValue === undefined); // true, как и ожидалось

а теперь:

var undefined = "I’m not undefined!";
var someValue;
console.log(someValue == undefined); // Ha Ha

Веселая математика

console.log(3 - 1); // -> 2
console.log(3 + 1); // -> 4
console.log('3' - 1); // -> 2
console.log('3' + 1); // -> '31' // Неожиданно и весело, не так ли

Строка не является экземпляром String

"str"; // -> ‘str’
console.log( typeof "str"); // -> ‘string’
console.log("str" instanceof String); // -> false


Надеюсь было весело. Спасибо за внимание.


По материалам статьи XOR “9 Examples Showing How JavaScript Sometimes Behaves Illogically”.

    • frontend
    • js

Новые публикации

Далее

Категории

О нас

Frontend & Backend. Статьи, обзоры, заметки, код, уроки.