let user = { name: "Джон" };
let admin = { name: "Админ" };
function sayHi() {
alert( this.name );
}
// используем одну и ту же функцию в двух объектах
user.f = sayHi;
admin.f = sayHi;
// вызовы функции, приведённые ниже, имеют разное значение this
// "this" внутри функции является ссылкой на объект, который указан "перед точкой"
user.f(); // Джон (this == user)
admin.f(); // Админ (this == admin)
admin['f'](); // Админ (неважен способ доступа к методу - через точку или квадратные скобки)
window
и не покидает его. const gotTime = (dateStr, days) => {
const che = new Date(dateStr); // дата события
che.setDate(che.getDate() - days); // N дней до события
return che - new Date() > 0; // ещё не наступила граница N-дней-до-события
}
gotTime('2019-11-14T09:07:02.376+00:00', 3); // true
// сегодня 2019-10-15
gotTime('2019-10-19T09:07:02.376+00:00', 3); // true
gotTime('2019-10-18T09:07:02.376+00:00', 3); // false
gotTime('2019-10-17T09:07:02.376+00:00', 3); // false
(123.4567).toExponential() // "1.234567e+2"
[1, 10)
, после запятой и степень.[1, 234567, 2]
>=
, <=
const fuzzy = {
split: n => {
const parts = n.toExponential().split('e')
.map((p, i) => i ? parseInt(p) : p.split('.').map(x => parseInt(x)));
if (parts[0].length < 2) parts[0].push(0);
return [parts[0][0], parts[0][1], parts[1]];
},
eq: (a, b) => {
a = fuzzy.split(a);
b = fuzzy.split(b);
if (a[2] !== b[2]) return false;
const diff = Math.abs(a[1] - b[1]);
if (diff === 0) return Math.abs(a[0] - b[0]) <= 1;
if (a[0][0] !== b[0][0]) return false;
return (diff <= 1);
}
}
fuzzy.eq( 12.1234, 12.1233) // true
const tests = [
[1, 1, true],
[111, 112, true],
[0.001, .002, true],
[0.001, .0025, false],
[0.001, .003, false],
[12.345, 1.2345, false],
[123.88, 123.870, true],
[-1.11111111, 1.11111110, false],
[-1.11111111, -1.11111112, true],
[2.000000001, 2, true],
[4.9999999998, 4.9999999999, true],
[7.9, 8.02, false],
[7.99, 7.98, true],
[7.99, 7.99, true],
[7.99, 8.00, true], // НЕ ПРОХОДИТ! Надо этот случай предусмотреть, но я ушёл спать.
];
let allok = true;
tests.forEach(test => {
if (fuzzy.eq(...test) !== test[2]) {
console.log("FAIL:", test);
allok = false;
} else {
console.log("OK:", test);
}
});
console.log(allok ? 'All OK!' : "Some tests FAILED");
const getById = id => data.filter(s => s.structureId === id)[0] || false;
const getChild = me => data.filter(s => s.parentId === me.structureId)[0] || false;
const getMyParent = me => getById(me.parentId);
const getParentsChain = me => {
const chain = [];
let parent = getMyParent(me);
while(parent) {
chain.unshift(parent);
parent = getMyParent(parent);
}
return chain;
}
const getChildrenChain = me => {
const chain = [];
let child = getChild(me);
while(child) {
chain.push(child);
child = getChild(child);
}
return chain;
}
// test
const me = getById(3);
console.log([...getParentsChain(me), me, ...getChildrenChain(me)]); /*
0: Object { name: "Дирекция юкрк", parentId: null, structureId: 1 }
1: Object { name: "Южно-Курильск", parentId: 1, structureId: 2 }
2: Object { name: "Служба главного инженера", parentId: 2, structureId: 3 }
3: Object { name: "Мехцех", parentId: 3, structureId: 4 } */
.nextSibling
вернёт Node типа TEXT_NODE
(3). document.getElementById('aa').nextSibling.textContent // "222"
data
- в наследство от CharacterData;e.delegateTarget
по идее содержит элемент, на котором висит слушатель.function getUniqueNum(offset = 0) {
const now = new Date();
noise.seed(0xCEED);
let num = 0;
let hours = now.getHours() + offset;
while(hours-- >= 0) num += Math.round((1 + noise.perlin2(hours / (24 + offset), now.getDate() / 32)) * 100);
return num;
}
function test(a, b, funcName) {
let c = a+b;
if (typeof this[funcName] === "function") this[funcName]();
else throw `No such function ${funcName}`;
return c;
}
function multiplication() {
console.log("multiplication!");
}
test(2, 3, 'multiplication'); // выведет multiplication!
test(6, 4, 'division'); // выкинет ошибку, бо нет такой функции
"5" > "499999"
// замените
var bal = $.trim($('#bal').val());
// на
var bal = +$.trim($('#bal').val());
cl
– сделать из текста число.cl
окажется свежий результат выполнения ajax-запроса?var cl1 = $.ajax({
url: "ajaxs.php",
data: "x=test",
type: "POST",
success: function (data) {
window.test1 = data;
}
});
var cl = test1;
setItem()
, или вытащить getItem()
, если есть — всё тот же текст.const KEY = 'my-likes';
let likes = 0; // по умолчанию
if (localStorage.hasOwnProperty(KEY)) likes = +localStorage.getItem(KEY);
const showLikes = n => document.querySelector("#root").innerText = n;
showLikes(likes);
let plusOne = () => {
likes++;
localStorage.setItem(KEY, likes);
showLikes(likes);
}
const hpDelta = chance => 10 + (chance > 5 ? 10 : 0) + (chance > 7 ? 20 : 0);
const simpleFight = () => {
let player_hp = 100;
let enemy_hp = 100;
let player_chance;
let enemy_chance;
const hpDelta = chance => 10 + (chance > 5 ? 10 : 0) + (chance > 7 ? 20 : 0);
const randomChance = () => Math.floor(Math.random() * 11);
const healthReport = hello => console.log(`${hello||''} Your health: ${player_hp}%, enemy health: ${enemy_hp}%`);
const chanceReport = hello => console.log(`${hello||''} Your chance: ${player_chance}, enemy chance: ${enemy_chance}`);
healthReport("Welcome!");
while (player_hp || enemy_hp > 0) {
player_chance = randomChance();
enemy_chance = randomChance();
chanceReport();
if (player_chance > enemy_chance) {
enemy_hp -= hpDelta(player_chance);
console.log(`Your turn. Enemy health updated to: ${enemy_hp}%`);
} else if (enemy_chance > player_chance) {
player_hp = hpDelta(enemy_chance);
console.log(`Enemy's turn. Your health updated to: ${player_hp}%`);
} else {
chanceReport('Equal chances!');
}
if (enemy_hp <= 0) {
healthReport('You win!');
break;
} else if (player_hp <= 0) {
healthReport('You lost!');
break;
}
}
}
simpleFight();
r.forEach(e => e.field = myFunc(e.field));