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)
будут проверяться до тех пор, пока какой-то не вернёт не-нулевое значение. setTimeout( ()=>{...}, 0)
:var promise = new Promise( function (ok, fail) {
setTimeout( function() {
console.log('1');
ok();
}, 0);
});
// Здесь функция обещания ещё не выполнена.
console.log('2');
promise.then(function () {
console.log('3');
});
// 2 1 3
var promise = Promise.resolve( value);
01234567890123
Widget with id
..|=>.......^
var str = "Widget with id";
alert( str.indexOf("Widget") );
// 0 – прямо с нулевой позиции найдено совпадение
alert( str.indexOf("id") );
// 1 – находится первое же совпадение, после "W" идёт "id":
// 01234567890123
// Widget with id
// .^............
alert( str.indexOf("widget") ); // –1 значит «не найдено». W не равно w
var sqlDT = "2014-09-12 00:00:00";
var BD = new Date( sqlDT.replace(' ','T'));
var Now = new Date();
BD.setMinutes( BD.getMinutes() + Now.getTimezoneOffset()); // в UTC
if( BD.getMonth() === Now.getUTCMonth()
&& BD.getDate() === Now.getUTCDate()
) {
// ура! День рождения!
}
background-*
:background: #F90
полностью эквивалентен background-color: #F90
background: #F90 url(fon.jpg) repeat-x
равен background-color: #F90;
background-image: url(fon.jpg);
background-repeat: repeat-x;
var showSE = function( isSuccess, el) {
el.parentNode.classList.remove('error');
el.parentNode.classList.add('success');
el.nextElementSibling.InnerHTML = isSuccess ? "" : el.dataset.error;
}
var showError = showSE.bind(null, false);
var showSuccess = showSE.bind(null, true);