Цитата:
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, время: 13:22. |