var n = prompt('введите начальное число диапозона', '0');
var k = prompt('введите конечное число диапозона', '0' );
var n = parseInt(prompt('введите начальное число диапозона', '0'), 10);
var k = parseInt(prompt('введите конечное число диапозона', '0' ), 10);
9 < 10 // true
'9' < '10' // false
Во втором случае получается «ложь», потому что строки сравниваются по кодам символов, начиная с первого символа, те '9' < '1'. Смотрим коды символов:'9'.charCodeAt(0) // 57
'1'.charCodeAt(0) // 49
57 больше 49, поэтому сравнение заканчивается, выдавая значение false.function getData(obj_form){
var hData = {};
$('input, textarea, select', obj_form).each(function(){
if(this.name && this.name!=='') {
var data;
if (this.type === 'checkbox') {
console.log('ветка true');
data = this.checked;
} else {
console.log('ветка false');
data = this.value;
}
hData[this.name] = data;
console.log('hData[' +this.name + '] = ' + hData[this.name]);
}
});
return hData;
};
fetch(url).then(function(response) {
return 42;
})
(42).then() // => TypeError: 42.then is not a function
Вторая причина, это то что промисы не выполняются сразу. В этом и смысл, верно? Мы создаём цепочку отложенных вычислений по принципу Если произошло это, тогда сделать То, а потом Вот это и т.д. Методу then просто нечего возвращать на тот момент, когда ты его запускаешь. Его запуск только создаёт план действий.'use strict';
let urls = [
'https://apiv2.bitcoinaverage.com/indices/global/ticker/ETHUSD',
'https://apiv2.bitcoinaverage.com/indices/global/ticker/LTCUSD',
'https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD'
];
let data = urls.map((item, index) => {
return fetch(item).then(function(response) {
return response.json();
}).then(function(data) {
console.log(data);
}).catch( alert );
})
console.log(data);
Сначала в консоли появится массив промисов, который ты уже видел. А уже через секунду три объекта, которых ты ждал.'use strict';
let urls = [
'https://apiv2.bitcoinaverage.com/indices/global/ticker/ETHUSD',
'https://apiv2.bitcoinaverage.com/indices/global/ticker/LTCUSD',
'https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD'
];
let array = urls.map((item, index) => {
return fetch(item).then(function(response) {
return response.json();
}).catch( alert );
});
Promise.all(array).then(console.log);
function(event) {
event.preventDefault();
$('.device_model_btns a').removeClass('active');
$(this).addClass('active');
var id = $(this).attr('href');
$('.phone_tabs_item').hide();
$('.phone_tabs_item').removeClass('phone_tabs_item_active');
$(id).addClass('phone_tabs_item_active');
$(id).show();
resetMoreContentBtn();
}
var firstname, surname;
function User() {
this.setFirstName = function(name) {
if (name.replace) {
firstname = name;
}
else {
throw new Error('Введите имя');
}
}
this.setSurname = function(name) {
if (name.search) {
surname = name;
}
else {
throw new Error('Введите фамилию');
}
}
this.getFullName = function() {
return firstname + ' ' + surname;
}
}
var user = new User();
user.setFirstName("Петя");
user.setSurname("Иванов");
alert( user.getFullName() ); // Петя Иванов
var user2 = new User();
user2.setFirstName('Фёдор');
user2.setSurname("Марков");
alert( user2.getFullName() );
alert( user.getFullName() ); // Уже не Петя Иванов
function func(arr, parametres) {
for (let i = 0; i < parametres.length; i++) {
const param = parametres[i];
let condition;
if (param.type === 'type1') {
condition = true;
} else if (param.type === 'type2') {
condition = false;
} else {
// может ли быть 'type3' или что-то такое, тогда пропускаем этот шаг
continue;
}
// судя по телу второго цикла
// при каждой итерации founded переписывается
// значит в результате происходит сравнение только последней пары
// и цикл можно убрать
if (
(
arr[arr.length - 1].property1 === param.property1 &&
arr[arr.length - 1].property2 === param.property2
) === condition
) {
return false;
}
// но скорее всего это была бага, и цикл нужно переписать так
for (let j = 0; j < arr.length; j++) {
if (
(
arr[j].property1 === param.property1 &&
arr[j].property2 === param.property2
) === condition
) {
// при первом же совпадении функция будет завершена
// без бесполезных проходов по оставшимся элементам
return false;
}
}
}
return true;
};
bar
.bar
. И при каждом запуске функции, она возвращает уникальную ссылку на уникальный объект.foo
.foo
, а значит это переменная в лексическом окружении при создании функции.var
сейчас принято использовать let
и const
, про оператор delete
я почему-то не нашел упоминания что его лучше не использовать. Думаю это некритично. function quickSort (array) {
if (array.length <= 1) { // так понятнее
return array;
} else {
let pivotIndex = Math.floor(array.length / 2); // так понятнее
let pivot = array[pivotIndex];
let less = [];
let greater = []; // не объявляйте переменные через запятую
for (let i = 0; i < array.length; i++) { // индексы элементов в массиве идут с нуля
if (i === pivotIndex) continue; // опорный элмент нужно пропускать
if (array[i] <= pivot) {
less.push(array[i]);
} else {
greater.push(array[i]);
}
}
let result = [];
return result.concat(quickSort(less), pivot, quickSort(greater));
}
}
console.log(quickSort([5,1,7,4,3])); // алерт?
function getTree(flatTree) {
// node["1"] is node.index
// node["key"] is node.parent.index
flatTree.forEach(node => {
const nodeIndex = node["1"];
const nodeParentIndex = node["key"];
node.parent = flatTree
.find(someNode => someNode["1"] === nodeParentIndex);
node.childrens = flatTree
.filter(someNode => someNode["key"] === nodeIndex);
node.siblings = flatTree
.filter(someNode => someNode["key"] === nodeParentIndex && someNode !== node);
});
const rootNode = flatTree.find(obj => obj["1"] === 1);
return rootNode;
}
const flatTree = [
{"1": 1, "3": 128, "4": 1, "key": 0},
{"1": 2, "3": 0, "4": 0, "key": 1},
{"1": 3, "3": 0, "4": 0, "key": 1},
{"1": 4, "3": 0, "4": 0, "key": 2},
{"1": 5, "3": 0, "4": 0, "key": 2},
{"1": 6, "3": 0, "4": 0, "key": 3},
{"1": 6, "3": 0, "4": 0, "key": 3},
{"1": 7, "3": 0, "4": 0, "key": 1}
];
console.log(getTree(flatTree));
document.getElementById('game').onclick = function(event){
console.log(event);
if (event.target.className == 'block' && event.target.innerHTML === ''){
if (hod%2==0) {
event.target.innerHTML = 'x';
}
else {
event.target.innerHTML = '0';
}
hod++;
checkWinner();
}
}
document.addEventListener('DOMContentLoaded', () => {
form.prototype.submitForm = function { console.log('test') }
form.prototype.submitForm()
});
parentElem.onclick = function(event) {
if(условие) f(event.target)();
}
console.log()[puzzles[first],puzzles[second]] = [puzzles[second],puzzles[first]]
replacePuzzles({commit, getters},{first,second}){
let puzzles = getters.getPuzzles
console.log(puzzles[first],puzzles[second])
;[puzzles[first],puzzles[second]] = [puzzles[second],puzzles[first]]