В этой статье мы рассмотрим некоторые странные и неизвестные факты о JavaScript.

Если вы работаете с JavaScript в течение длительного времени, вы можете заметить, что иногда он ведет себя странно. В этой статье мы рассмотрим некоторые странные и неизвестные факты о JavaScript.

Я работаю с JS уже почти 4+ года! Иногда я все еще придерживался некоторых скрытых уловок, о существовании которых даже не подозревал. Здесь я рассмотрю почти все уловки / факты / особенности, которые я обнаружил во время работы с JS.

Сумма массивов и объектов

{} + [] // 0
[] + {} // "[object Object]"
[] + [] // ""
{} + {} // "[object Object][object Object]"

Из приведенного выше кода вы должны знать, что

{} + []  == [] + {} 
// returns false.

Сумма плавающих чисел

Это чушь! Как? посмотрите на пример.

0.1+0.2  //0.30000000000000004
0.1+0.3  //0.4
0.2+0.4  //0.6000000000000001
0.2+0.5  //0.7
0.3+0.6  //0.8999999999999999
0.3+0.7  //1

0,1 + 0,2 в коде JS не вернет 0,3, «НО» 0,1 + 0,3 вернет 0,4. Итак, 0,1 + 0,2 == 0,3 вернет false. ПОЧЕМУ JS ПОЧЕМУ! Будьте осторожны, ребята.

Размещение скобок имеет значение

Да, вы не ослышались. В коде JS, где вы помещаете стартовую скобку, имеет значение, когда? Минутку. позвольте мне задать один вопрос,

function method1() {
   return
   {
      name: 'foo'
   }
}
function method2() {
   return {
      name: 'foo'
   }
}
typeof method1() === typeof method2()

Посмотрите на этот код, что в результате? К вашему сведению, он вернет false, потому что первая функция возвращает undefined, а вторая функция вернет объект. Итак, скобки играют важную роль.

Вы можете начинать предложения с точки с запятой

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

;let JSisWeird = 2

Равный не всегда равен

Посмотрите на код,

1 == 1; //true
'foo' == 'foo'; //true
[1,2,3] == [1,2,3]; //false

Понять поведение JS? Нет? это абсолютно правильно. 1 равно 1, а foo равно foo. Массив не равен массиву, потому что это просто ссылочный тип. Это общая концепция. Но что, если я приведу другой пример,

new Array(3) == ",,"; //true

Сравнение объектов

Для этого я создаю два объекта и сохраняю их ссылки в двух переменных.

var o1 = {},
    o2 = {};

У нас есть две разные ссылки:

o1 == o2 //false
o1 === o2 //false

Все работает отлично. Итак, попробуем это на JS:

o1 >= o2 //true
o1 <= o2 //true
o1 != o2 //true
o1 !== o2 //true

Как оно? Странный? Не правда ли?

Скобки конструктора не являются обязательными

Вы не ослышались, скобки, которые мы добавили после имени класса, при вызове конструктора не нужны.

//1
const date = new date()
const month = new date().getMonth()
const firstInstance = new FirstClass
//2
const date = new Date
const month = newDate.getMonth()
const firstInstance = new FirstClass

Посмотрите на оба кода, оба дают одинаковые результаты. Оба являются действительными операторами JS.

Заключение

Есть много странного поведения JavaScript, или вы можете сказать забавные факты. Иногда синтаксис JavaScript и его функции могут быть опасны в производственной среде, если вы его неправильно разместили или неправильно использовали. Будьте осторожны при их использовании. 😁

Я JavaScript и с удовольствием пишу о нем статьи. Я люблю делиться с вами своими открытиями. Если вам понравилось, поделитесь им и с другими товарищами.

Если вам нравится эта статья, помогите мне купить кофе: https://www.buymeacoffee.com/harry1408

Суровый Патель | Full-Stack Developer | Http://imharshpatel.com