api.vk.com
, это кроссдоменный запрос. В jQuery ajax нужно указать тип данных jsonp
.function getPhoto( id, callback) {
$.post({
url: "https://api.vk.com/method/users.get",
data: {
user_id: parseInt(id),
fields: "photo_100",
v: 5.63
},
dataType: "jsonp",
success: function(r) {
if(r && r.response && r.response[0].photo_100) {
return callback(r.response[0].photo_100);
} else {
console.log("No photo in response")
}
}
});
}
function gotPhoto( url) {
var img = $('<img>')
.attr('width', 100)
.attr('height', 100)
.attr('src', url)
;
$('body').append(img);
}
getPhoto( 755074, gotPhoto);
arguments.callee
содержало название текущей функции/метода. Но в ES5 от этого отказались, и поэтому в strict mode это вызовет ошибку. "use strict";
можно было бы написать в каждой функции console.log( arguments.callee);
function loadCurrencyJSON() {
return '{"AUD":44.95,"GBP":73.42,"BRL":18.8,"USD":58.85,"EUR":62.68,"ZZZ":79.91}';
}
function convertCurrency (amount, from, to) {
let rates = JSON.parse(loadCurrencyJSON());
return ( amount / rates[to] * rates[from]).toFixed(2); // вернуть число, округленное до сотых
}
let price1 = convertCurrency(7000, 'ZZZ', 'USD');
console.log(`Сумма ${price1} USD`);
// Сумма 9505.01 USD
let price2 = convertCurrency(790, 'EUR', 'ZZZ');
console.log(`Сумма ${price2} Q`);
// Сумма 619.66 Q
$
– это объект jQuery. Через точку к нему обращаются, чтобы вызвать его методы или получить свойства. В вашем примере вызывается метод hide()
step
– туда можно передать функцию, которая будет вызываться при каждом шаге анимации. Можно запустить «пустую» анимацию, которая не будет ничего прятать, но станет вызывать упомянутую функцию. Иногда и такое нужно.$.each()
) позволяет «пробежаться» как по массиву, так и по объекту, выполняя какое-то действие с каждым из элементов/свойств. 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( условие )