Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

<?php
namespace App\Models;
class Cities
{
public function setTitle()
{
return $this;
}
public function save()
{
return $this;
}
public static function getModelName()
{
return '';
}
}
SomeClass::someMethod, то встроенная в IDE утилита переименует только его (отрефакторив и места использования), она не будет трогать AnotherClass::someMethod и строку Hello, someMethodgetTemplated: function( text, replacements ){
for( var i in replacements )
replacements.hasOwnProperty( i ) &&
( text = text.replace( new RegExp('\\{'+ i +'\\}','gi'), replacements[ i ] ) );
return text;
},
success && (obj.ok() | obj.oneMoreOk());success && obj.ok() ^ obj.oneMoreOk();
success&&(
obj.start()||1
)||(
obj.stop()||1
)
1==0&&(
console.log(5)||"первое условие"
)||7==8&&(
console.log(9)||1
)||7==7&&(
console.log(100)||"условие по умолчанию"
)
success && (obj.ok() || true) && obj.oneMoreOk();
или
success && obj.oneMoreOk(obj.ok(), void 0);
(success && obj.ok()) || obj.bad();
for(var i = 0; i < 1000000; i++) { "test1" + "test2" + "test3" + "test4" } // 624ms
for(var i = 0; i < 1000000; i++) { ["test1", "test2", "test3", "test4"].join() } // 639ms
for(var i = 0; i < 1000000; i++) { "test1" + i + "test2" + i + "test3" + i + "test4" } // 1467ms
for(var i = 0; i < 1000000; i++) { ["test1", "test2", "test3", "test4"].join(i) } // 951ms
i = array.length;
while (i--) { }
Math.random().toString(33).substr(2)
!!x~~x~~'1 str'; // 0
~~[1]; // 1
~~[1, 2]; // 0
~~1.9; // 1
0 | x объективно лучше, чем ~~x, но в любом случае лучше написать явно Boolean(x) и Math.floor(x), ведь вы пишете код для людей ;-)| 0.var z = 15;
doSomeMath(z, 10);
xxx // Отличный оператор. Я единственный, кто его использует вместо TODO
doSomeMoreMath(z, 15);
xxx, то ничего здесь не остановится и это будет считаться валидным кодом, т.к. в javascript существует автоматическая расстановка точек с запятой.var action = '/sendForm',
i18nLogin = 'Введите логин',
myPrettyForm = [
'<form action="', action, '" method="POST">',
'<fieldset>',
'<input type="email" placeholder="', i18nLogin,'"/>',
'<input type="submit" />',
'</fieldset>',
'</form>'
].join('');
стрёмного медленного switch
var mySwitch = {
'case1': function () {},
'caseN': function () {}
};
// и потом сделать
mySwitch[check]()
obj[success ? 'start' : 'stop']();
"obj[success?'start':'stop']();".length // 30
"success?obj.start():obj.stop();".length //31
"o[success?'start':'stop']();".length // 28
"success?o.start():o.stop();".length //27
obj[success ? 'start' : 'stop'].call(obj);
this критично.for (var k in items) if (items.hasOwnProperty(k)) {
// do something with items[k]
}
x = x || defVal;
x || (x = defVal);
+memoize
+function longCalculation() {
...
}
var b = b || false; // ok
var b = b || true; // always true, when b is boolean
var tpl = "{alfa} and {beta} sat on the tube";
var txt = tpl;
txt = txt.replace("{alfa}", "A{beta}Z"); // "A{beta}Z and {beta} sat on the tube"
txt = txt.replace("{beta}", "B"); // "ABZ and B sat on the tube
txt = tpl;
txt = txt.replace("{beta}", "B"); // "{alfa} and B sat on the tube"
txt = txt.replace("{alfa}", "A{beta}Z"); // "A{beta}Z and B sat on the tube
printf("{%s}", "[%s]", "hello") вывел бы {[hello]}function substitute(tpl, dict)
{
var f = function(g0, g1, ofs, s)
{
if(g1 in dict)
return dict[g1]; // substitute
else
return g0; // leave as-is
};
return tpl.replace(/{([^}]+)}/g, f);
}
var s;
s = substitute("{mama} myla {ramu} - {bahama} {mama}", {mama:"MAMA", bahama:"BAHAMA"}); // MAMA myla {ramu} - BAHAMA MAMA
s = substitute("{alfa} and {beta} sat on the tube", {alfa:"A{beta}Z", beta:"B"}); // A{beta}Z and B sat on the tube
var method = success ? 'start' : 'stop';
еще можно так:var method = ['stop','start'][+success];
Несколько JavaScript хаков для хипстеров