Search
Write a publication
Pull to refresh
116
0
Send message
А можно немного критики?

function count(str){return str.count;}
String.prototype.count? В спеках такого нет.
function trim(str){return $.trim(str);}
Весь jQuery тащить ради одного метода? Он же пишется элементарно. А в ES5 уже есть String.prototype.trim() из коробки.
function substr(a,b,c){if(b<0){b+=a.length;}if(c==undefined){c=a.length;}else if(c<0){c+=a.length;}else{c+=b;}if(c<b){c=b;}return a.substring(b,c);}
function substr(a,b,c){return a.substr(b,c);}

function is_numeric(a){return !isNaN(a-0) && a!==null && a.replace(/^\s\s*/,'')!=="" && a!==false;}
> is_numeric(42)
TypeError: Object 42 has no method 'replace'

Плюс к тому, этот метод может привести к непредсказуемым результатам:
var foo = "42", bar = "42";
if (is_numeric(foo) && is_numeric(bar)) return foo + bar; // "4242"

Джаваскрипт всё-таки надо писать на джаваскрипте.
«А мальчик Валентин потом это слово в словаре нашел, и так оно ему в душу запало, что стал он впоследствии главным специалистом по бихевиоризму.»
Парни из Mozilla вроде как пытаются что-то подобное сотворить: asmjs.org/spec/latest/.

Но вообще, судя по тому, что Dart не взлетел (а VBScript в своё время отмер), по поводу «смены власти» в браузерах у меня есть сомнения. Должно произойти что-то экстраординарное, чтобы производители браузеров выкинули на помойку свои отполированные V8 и SpiderMonkey.
В JavaScript слишком мало Java?
Простой пример: если на странице в счётчике просмотров красуется «NaN», это неприятно, но не фатально. Или было бы лучше, если из-за такой ошибки вся страница становилась нефункциональной?

С другой стороны, скажу честно, в моей нынешней практике незамеченные баги, вызванные несоответствием типа — редкость. При условии, что в нужном месте производится проверка isFinite() (кстати, NaN может случиться и не только от приведения типов), аргументы (при необходимости) явно приводятся к конкретному типу, и сравнивание производится только через === за исключением == null.
В JS, кстати, тоже если ты присвоил foo = 42, то оно там так и останется лежать в виде числа, пока этой переменной не присвоишь что-нибудь другое. Даже после foo + "bar".
Вы жалуетесь на то, если Вы скормите интерпретатору херню, он не кинет ошибку, а попытается вернуть более-менее вменяемый результат?
Только не подумайте, что придираюсь по мелочам, вот тут я не понял немного.
'33.4' + 1 == 34.4    // мы видели не все...

На выходе получится '33.41', поведение такое же, как и строчкой выше («если хотя бы один операнд — строка, складываем как строки»), чего тут неожиданного?
Собственно, да.
А если есть необходимость сначала использовать require('fs').stat(), где коллбек вызывается с (int err, object result), а затем какой-нибудь megaLib.doJob(), вызывающий коллбек с (object result)? Насколько я понял, итератор поперхнётся, приведя result к boolean и получив true.
Очень изящно. Но как быть, если у коллбеков разные сигнатуры?
Это понятно. Просто хотел поделиться альтернативным решением.
Скрытый текст
with(rx1=/regularexpression/,{rx1:0})
var rx1 = RegExp(/regular/ + /expression/);
var rx2 = /regularexpression/;

Но это, наверное, читерство.
isFinite(1 / Number.MIN_VALUE); // ?
(1 / Number.MAX_VALUE) !== 0; // ?

Скрытый текст
isFinite(1 / Number.MIN_VALUE); // false
(1 / Number.MAX_VALUE) !== 0; // true


Это не особенность JS как такового, а типа Number (который double).

Number.MIN_VALUE равен 5×10-324, 1 / Number.MIN_VALUE по-идее должен бы быть равен 2×10323, но это число слишком большое.

А наоборот — пожалуйста, точности хватает.

Подробнее о том, почему в отрицательную сторону экспонента немного «вместительнее» — на википедии.

*UPD:* Поправил пример
А как же потом программно обрабатываются нажатия этих клавиш? Они определяются как геймпад, а затем вручную в каком-нибудь ниндзя-трейдере или есигнале маппятся на действия?
Готов поспорить, это задачу можно было бы решить без jQuery и canvas.
Падеюсь, от scrypt откажетесь. Заставить работать npm install scrypt под win7 — это для меня было задание #0.
Как-то недостаточно хипстерски.

success && obj.ok() ^ obj.oneMoreOk();
Молодой человек, Вы же даже не старались. Всё это прекрасно укладывается в 311 байт:

source
<script>for(var s='',h=function(a){return(a=(15-a*3).toString(16))+a},g,b,v,r=6;r--;s+='<br>')for(g=6;g--;)for(b=6;b--;s+='<b style="background:#'+v+';display:inline-block;width:8px;height:8px;border:1px solid;margin:-1px" title='+v+' onclick=prompt("","'+v+'")></b>')v=h(r)+h(g)+h(b);document.write(s)</script>
Буквально неделю назад писал свой арканоид (вернее, «арканоидо-оид», потому как управление другое) по правилам js1k. Выкладывать на хабр не стал, не думал, что кого-то заинтересует, видимо, зря.

Но сейчас, с позволения хабровчан, скромно оставлю ссылку: демо, код.
Справедливое замечание, чего-то я ерунду написал. Поправлюсь: в IP контрольная сумма не считается, она считается в TCP, который работает поверх IP.

Information

Rating
8,610-th
Location
Ростов-на-Дону, Ростовская обл., Россия
Date of birth
Registered
Activity