Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 02.07.2011, 23:34
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от B@rmaley.e><e
Но с учетом поправки, корректный код будет выглядеть так:
Однако, не соответствует условиям здания, т.к. выражения должны быть идентичными
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)
Ответить с цитированием
  #22 (permalink)  
Старый 02.07.2011, 23:36
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

monolithed, регэкспы - объекты, в данном случае идентичными в смысле оператора == они не будут никогда.
Ответить с цитированием
  #23 (permalink)  
Старый 02.07.2011, 23:49
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от B@rmaley.e><e
регэкспы - объекты, в данном случае идентичными в смысле оператора == они не будут никогда.
ну это я имел ввиду, что без приведения к элементарному типу никак
Ответить с цитированием
  #24 (permalink)  
Старый 03.07.2011, 17:07
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

есть идентичность по имени (которое в данном случае - адрес в памяти), а есть идентичность по содержимому (рекурсивное равенство всех данных).

первая - как правило бесполезна. редко когда нужно отличать объекты с одинаковым содержимым.
вторая же наоборот как правило и нужна, но по неведомой мне причине, реализуется через костыли типа a.equal(b)
по хорошему оператор == должен проверять именно идентичность данных, а не проверять через десяток эвристик: если оба объекты - сравниваем по имени, если один из них строка - сравниваем "строковые представления" (которые у разных объектов либо отражают содержимое, либо лишь принадлежность к классу), если один из них число - сравниваем "примитивные значения".
__________________
.ня
Ответить с цитированием
  #25 (permalink)  
Старый 04.07.2011, 08:37
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Вчера 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

Последний раз редактировалось mycoding, 04.07.2011 в 11:44.
Ответить с цитированием
  #26 (permalink)  
Старый 04.07.2011, 10:39
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Сообщение от mycoding
1 - Почему это так?
Потому что вызывается a.push(7, 8, 9)

Сообщение от mycoding
3 - Это как такое получается?
Что получается? Syntax error что ли?

Сообщение от mycoding
var { a:x, b:y } = { a:7, b:8 };console.log(x); // prints: 7console.log(y); // prints: 8
Syntax Error в ES5.
Ответить с цитированием
  #27 (permalink)  
Старый 04.07.2011, 10:44
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Сообщение от B@rmaley.e><e Посмотреть сообщение
Потому что вызывается a.push(7, 8, 9)
Точно, забыл чуток
apply(this, [name, value]).

Сообщение от B@rmaley.e><e Посмотреть сообщение
Что получается? Syntax error что ли?
Сначала написал пример с threads, потом проверил что не работает
решил удалить, а коммент оставил.

Вот к чему это было
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) {}
}

Последний раз редактировалось mycoding, 04.07.2011 в 10:51.
Ответить с цитированием
  #28 (permalink)  
Старый 04.07.2011, 11:11
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Там многие вещи из JavaScript 1.6+ поэтому, работать будет только на платформах Geko и SpiderMonkey (до принятия ES6-7, однако кому не терпится можно попробовать уже сейчас) причем для запуска тех же yield/let код нужно заключать в дескрипторы с указанием версии:
<script type="application/javascript;version=1.7"/>

Последний раз редактировалось monolithed, 04.07.2011 в 11:15.
Ответить с цитированием
  #29 (permalink)  
Старый 04.07.2011, 17:51
Аватар для float
Профессор
Отправить личное сообщение для float Посмотреть профиль Найти все сообщения от float
 
Регистрация: 01.07.2010
Сообщений: 387

Цитата:
http://code.google.com/p/jslibs/wiki/JavascriptTips
ООооо.... Безграничные возможности для индусов.
Ответить с цитированием
  #30 (permalink)  
Старый 04.07.2011, 18:56
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

ого, я думал про js знаю всё, однако о такой фиче даже и не подозревал:

var result
job: {
    if( result ) break job
    result= 0
    if( result ) break job
    ++result
    if( result ) break job
    ++result
}
alert( result === 1 )


всегда эмулировал её через цыкл #^_^#
__________________
.ня
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Тестовое задание. Дайте идею. FINoM Оффтопик 14 28.03.2011 10:09
Помогите сделать тестовое задание начального уровня по js makregistr Работа 1 16.12.2010 14:26
Задание значения элемента формы и submit Enklgd01 Общие вопросы Javascript 4 28.09.2010 11:24
Решите задание! очень надо! Елизавета Оффтопик 70 08.06.2010 15:10
Задание CSS для загруженных во фрейм страниц <Pool> Общие вопросы Javascript 1 14.01.2009 16:59