Цитата:
RegExp.prototype.toString = function(){
return this.source;
}
var rx1 = RegExp(/regular/ + /expression/);
var rx2 = /regularexpression/;
alert(rx1 == rx2);
как альтернативный подход:
var rx1 = RegExp(/regular/ + /expression/);
var rx2 = /regularexpression/;
rx1 = rx1.source.replace(/\W/g, '').replace(/.*/, '/$&/');
rx1 = rx1.toString();
rx2 = rx2.toString();
alert(rx1 === rx2)
|
monolithed, регэкспы - объекты, в данном случае идентичными в смысле оператора == они не будут никогда.
|
Цитата:
|
есть идентичность по имени (которое в данном случае - адрес в памяти), а есть идентичность по содержимому (рекурсивное равенство всех данных).
первая - как правило бесполезна. редко когда нужно отличать объекты с одинаковым содержимым. вторая же наоборот как правило и нужна, но по неведомой мне причине, реализуется через костыли типа a.equal(b) по хорошему оператор == должен проверять именно идентичность данных, а не проверять через десяток эвристик: если оба объекты - сравниваем по имени, если один из них строка - сравниваем "строковые представления" (которые у разных объектов либо отражают содержимое, либо лишь принадлежность к классу), если один из них число - сравниваем "примитивные значения". |
Вчера monolithed, дал ссылку на интересные примеры.
Огромное тебе спасибо monolithed.:) Совет всем глянуть http://code.google.com/p/jslibs/wiki/JavascriptTips Честно признаюсь, что и понятия не имел о таких тонкостях и методах. Возьмем несколько примеров 1 - Почему это так? var a = [4,5,6]; var b = [7,8,9]; Array.prototype.push.apply(a, b); uneval(a); // is: [4, 5, 6, 7, 8, 9] 2 - Про такую технику я не знал, хотя до этого можно было додуматься))) Milliseconds since epoch alert(+new Date()); 3 - var text = <> this is my multi-line text </>.toString(); console.log(text); 4 - Creates a random alphabetic string
function RandomString(length) {
var str = '';
for ( ; str.length < length; str += Math.random().toString(36).substr(2) );
return str.substr(0, length);
}
RandomString(10);
5 - Kind of destructuring assignments Как это?
var { a:x, b:y } = { a:7, b:8 };
console.log(x); // prints: 7
console.log(y); // prints: 8
|
Цитата:
Цитата:
Цитата:
|
Цитата:
apply(this, [name, value]). Цитата:
решил удалить, а коммент оставил. Вот к чему это было Simulate threads using yield operator
//// thread definition
function Thread( name ) {
for ( var i = 0; i < 5; i++ ) {
Print(name+': '+i);
yield;
}
}
//// thread management
var threads = [];
// thread creation
threads.push( new Thread('foo') );
threads.push( new Thread('bar') );
// scheduler
while (threads.length) {
var thread = threads.shift();
try {
thread.next();
threads.push(thread);
} catch(ex if ex instanceof StopIteration) {}
}
|
Там многие вещи из JavaScript 1.6+ поэтому, работать будет только на платформах Geko и SpiderMonkey (до принятия ES6-7, однако кому не терпится можно попробовать уже сейчас) причем для запуска тех же yield/let код нужно заключать в дескрипторы с указанием версии:
<script type="application/javascript;version=1.7"/> |
ООооо.... Безграничные возможности для индусов.
|
ого, я думал про js знаю всё, однако о такой фиче даже и не подозревал:
var result
job: {
if( result ) break job
result= 0
if( result ) break job
++result
if( result ) break job
++result
}
alert( result === 1 )
всегда эмулировал её через цыкл #^_^# |
| Часовой пояс GMT +3, время: 10:41. |