Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
// WTFJS: We parse till we get an error using radix 16 => 0xf => 15 :)
var fifteen = parseInt('fuckItMan', 16);
[] //0
[,] //1
[,,,] //3
[,undefined,] //2
[,NaN,] //2
[,NaN,null,0] //4
[,null,NaN,] //3
isFinite(1 / Number.MIN_VALUE); // ?
(1 / Number.MAX_VALUE) !== 0; // ?
isFinite(1 / Number.MIN_VALUE); // false
(1 / Number.MAX_VALUE) !== 0; // true
Number.MIN_VALUE равен 5×10-324, 1 / Number.MIN_VALUE по-идее должен бы быть равен 2×10323, но это число слишком большое. «Why am I a » + typeof + "";
«Who am I a number»
[1, 10, 5].sort
или [1, 2, 3].map(parseInt)var a,b=[1,2,3][1,2,3];
a === b;
[1, 2, 3].map(parseInt)
Или вот ещё недавно всплыло в твитере:
var a,b=[1,2,3][1,2,3]; a === b;
Давайте ещё функции сравним по приколу, это тоже возможно (навскидку, сравниваются их .length, которые равны арности функции)
В случае оператора “==”” привидение к примтивам осуществляется только если один из аргументов примитив, а во всех остальных случаях оператор “==” возвращает true только если оба аргумента ссылаются на один объект (пункт 11.9.3 “Алгоритм сравнения абстрактного равенства”).
var a = [1,2,3][1,2,3];
Ну вот зачем, например, сравнивать массивы?
Но вообще — читайте документацию и многие нелогичности окажутся просто другим поведением и обретут смысл…
Одно дело, когда пытаешься разобраться как работает работающий код и совсем другое, когда пишешь код, который вроде бы должен работать, но на некоторых данных ведёт себя не логично (исходя из здравого смысла, а не спецификаций) и точное место фэйла неизвестно.
Конечно если вы программист в госучреждении/большом предприятии
var rx1 = RegExp(/regular/ + /expression/);
var rx2 = /regularexpression/;
var arr = [];
arr.valueOf() === arr; // true
NaN === NaN // => false
0 === -0 // => true
1 / 0 === Infinity, а 1 / -0 === -Infinity, см. спецификацию.Object.is(NaN, NaN) // => true
Object.is(0, -0) // => false
Object.is(42, 42) // => true
Object.is(42, '42') // => false
JavaScript: проверьте свою интуицию