В этой статье мы рассмотрим некоторые странные и неизвестные факты о 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