1970-01-01 00:00:00 UTC
. Он также в курсе временной зоны устройства, и может учитывать её при формировании вывода.function toDate(date, time) {
return new Date( Date.UTC( date + ' ' + time));
}
dd/mm/YYYY HH:mm
можно получить, составляя из компонент. Опять же, по UTC получить, или в локальной временной зоне? Для UTC будет выглядеть так:function pad(n){ return ('0' + n).substr(-2) }
function toUTCString(d) {
return '' + pad( d.getUTCDate()) + '/' + pad(d.getUTCMonth()+1) + '/' + d.getUTCFullYear()
+' ' + pad( d.getUTCHours()) + ':" + pad( d.getUTCMinutes());
}
var r = ['купить','дешево','по ссылке'];
var msg = "хотите купить гараж?";
var re = new RegExp( r.join("|"), "gim"); // одно ИЛИ другое ИЛИ третье
if( re.test( msg)) { // спам detected }
var flag = false; // когда будет true - тушите свет!
function game() {
var i;
while(true) { // на самом деле из цикла так не выйти
// пока он крутится, другие потоки не смогут запуститься и изменить значение флага
i = i++;
if(flag) return; // выход, когда пора
}
}
setTimeout( function(){ flag = true;}, 60000}); // через минуту поднять флаг
game();
var timeToExit = (new Date).getTime() + 300000; // через 5 минут
function game() {
var i;
while(true) {
i = i++;
if( (new Date).getTime() >= timeToExit) return; // выход, когда пора
}
}
game();
rows
. Период этой «пилы» от верхнего пика до следующего верхнего пика составляет 2 * (rows - 1)
. Остаток от деления на этот период будет означать позицию внутри одного «зуба»:остаток: 0 1 2 3 4 5
строка: 0 1 2 3 2 1 – это хочется в итоге как-то получать
y = 0
и тогда отражение легко сделать, взяв абсолютное значение Math.abs()
:y : 3 2 1 0 -1 -2
abs: 3 2 1 0 1 2
0 1 2 3 4 5
, а нужно получить из него 3 2 1 0 -1 -2
. Умножить на -1 и добавить 3: Math.abs(rows - 1 - ost)
var i, ost, row, rows=4, period = 2 * (rows - 1); // 0 0 0 | 6 0 0
for(i = 0; i < 10; i++) { // 1 1 1 | 7 1 1
ost = i % period; // 2 2 2 | 8 2 2
row = rows - 1 - Math.abs(rows - 1 - ost); // 3 3 3 | 9 3 3
console.log( i, ost, row); // 4 4 2 | 10 4 2
} // 5 5 1 | 11 5 1
function encrypt( text, n) {
var i, ost, period = 2 * (n-1), r, row, out = [];
text = text.replace(/\s/g,""); // убрать пробелы
for(r = 0; r < period; r++) out[r] = ""; // пустые строки
for(i = 0; i<text.length; i++) {
ost = i % period;
row = n - 1 - Math.abs(n - 1 - ost)
out[row] += text.substr(i,1);
}
return out.join("");
}
function test( text, rows) {
var pre = document.createElement("pre");
pre.innerHTML = encrypt(text, rows);
document.body.appendChild(pre);
}
test("этот текст зашифрован", 4); // экинтесшфаоттарвтзо
function makeMap( len, n) {
var i, pip, period = 2 * ( n - 1);
var rows = Array.apply( null, Array( n)).map( function(){ return []});
for( i = 0; i < len; i++) {
pip = i % period;
r = pip < ( n - 1) ? pip : period - pip;
rows[ r].push( i);
}
return Array.concat.apply( null, rows);
}
function decrypt( text, n) {
var map = makeMap( text.length, n);
return text.split('').reduce(function(p,c,i,a){ return p + a[map.indexOf(i)]},'');
}
function encrypt( text, n) {
var map = makeMap( text.length, n);
return text.split('').reduce(function(p,c,i,a){ return p + a[map[i]]},'');
}
var a = 1, b = 2; // эти a, b – «глобальные», выше всех, «видны» везде
function calculate(x, y, z) {
// здесь определены локальные переменные x, y, z
// и видны все переменные из уровней выше
// напр. a и b
// ждём, что x – это будет функция
return x( y+a, z+b); // можно использовать и локальные и глобальные
}
function sum( a, b){ // а вот тут a,b – переопределены локально
// и к тем, глобальным a и b не имеют никакого отношения!
return a+b; // складывает те a и b, что передали при очередном вызове sum()
}
calculate( sum, 5, 6); // вызывает calculate, и там будет x = sum, y=5, z=6
sum( 7, 8); // вызывает напрямую sum, внутри которого будет a=7 и b=8
// при этом глобальные a и b никак не пострадают.
var n = 12345678;
n = n.toString(10).replace(/(\d)(?=(\d{3})+$)/g, '$1 '); // 12 345 678
var n = 123456789;
var a = n
.toString(10)
.split('').reverse()
.map(function(e,i){ return (i%3 ? e : ""+e+" ")})
.reverse()
.join('')
.trim()
;
// a = "123 456 789"
test.on()
– со скобками.var test=function(){
console.log("method:", arguments[0]);
};
var handler = {
get: function( target, name) {
var _method;
if(name in target) {
return target[name];
} else {
return target.bind( null, name); // если не определено свойство, передаем его 1-м аргументом
}
}
};
test = new Proxy( test, handler);
test.on(); // method: on
test.blabla(); // method: blabla
test(); // method: undefined
var answer;
do {
answer = prompt("Скажи 'стоп'", "");
document.write("Ты сказал '" + answer + "'.");
} while (answer !== "стоп");
while( условие) { действия }
do{ действия } while( условие )
var event = new MouseEvent('dblclick', {
'view': window,
'bubbles': true,
'cancelable': true
});
document.getElementById('button').dispatchEvent(event);
function nds( cost) {
return function() {
var _cost = cost;
var result = _cost * 1.13;
console.log( result.toFixed(2));
}
}
var a = nds(53);
var b = nds(12);
a(); // 59.89
b(); // 13.56
var total = 0;
function nds( cost) {
return function() {
var _cost = cost; // запомнили внутри цену
var result = _cost * 1.13; // добавили НДС
total += result; // добавили к общей сумме
console.log( "result:", result.toFixed(2), "total:", total.toFixed(2));
}
}
var a = nds(53);
var b = nds(12);
a(); // result: 59.89 total: 59.89
b(); // result: 13.56 total: 73.45
a(); // result: 59.89 total: 133.34
a(); // result: 59.89 total: 193.23
arr
как прототип:var arr = {
"name" : "Stive",
"age" : 29,
"all" : function() { return this.name + " " + this.age; }
};
var b = Object.create(arr);
b.name = "Bill";
b.age = 39;
b.all();
this
в arr
код для b
выполнится нормально и вернёт "Bill 39", а если в arr
вместо this
было прямое указание на arr
, то вернёт "Stive 29". ! ! ~ s.indexOf( substring)
– такая короткая запись означает «есть ли подстрока?»indexOf()
возвращает найденное положение подстроки в строке: число от 0 и больше; или –1, когда подстрока не найдена. На деле часто требуется из этого получить true
или false
– когда интересует лишь, есть подстрока или нет, а позиция её безразлична. Из –1 нам надо получить false, а из всего остального true.~
и логическое НЕ !
~
обладает замечательным свойством: только из –1 получается 0 (а из нуля –1): ~(-1) === 0
!
является логическим оператором и его результат – true или false. Например, !5 === false
, а !0 === true
.!!~
:!!~5 === true;
!!~0 === true;
!!~-1 === false;
indexOf()
, а в скобках перечислены несколько вариантов: (~s.indexOf('AAA') || ~s.indexOf('BBB'))
. ||
– это логическое ИЛИ. Проверяется слева направо, пока не найдётся первое выражение, которое конвертируется в true, и возвращается его значение как есть, без конвертации в true/false. Например:( false || 5) === 5;
( 0 || 0 || 1 || 0) === 1;
( 5 || 1 || true) === 5;
( false || 0) === 0;
~s.indexOf(substr)
будут проверяться до тех пор, пока какой-то не вернёт не-нулевое значение.