мне нужно таким образом, чтобы обернуть логическое значение, таким образом, что сравнение не нарушены, и результат строки отличается от «лжи» или «истины», не изменяя глобальные логические значенияКак я могу подклассы Boolean изменять строковое представление без отрицательных побочных эффектов вне моей функции?
function TestIt(bool){
if(wrapper(bool) == true)
return "it was: " + wrapper(bool)
if(wrapper(bool) == false)
return "it was: " + wrapper(bool)
return "no dice"
}
например,
var result;
result = TestIt(true);
// "it was: True"
result = TestIt(false);
// "it was: False"
Попытки я написал не удалось достичь всех указанных ниже условиях в то же время:
var initial = true;
var result1;
var result2;
(function(){
result1 = wrapper(true);
result2 = wrapper(true);
})()
// result1 == result2
// result1 == true
// result1.toString() != initial.toString()
// initial.toString() == true.toString()
// initial.toString() == (new Boolean(true)).toString()
Может кто-нибудь мне помочь, пожалуйста?
Мне нужно это (автоматическое) альтернативное преобразование строки, чтобы я мог дублировать строку, созданную в среде сервера, с использованием другого языка и точно соответствовать ей.
~~~~~~
Редактировать
~~~~~~
Я забыл упомянуть, что проблема я бегу в булево «valueOf» метод, который называется вместо toString (по-видимому) для конкатенации строк.
~~~~~~
Edit # 2
~~~~~~
Это также нужно будет работать неверно. Я просто оставил это для краткости. Однако обертка (false) == false дала мне головную боль.
~~~~~~
Edit Final
~~~~~~
Оказывается (в ответах ниже), что вы не можете изменить поведение по умолчанию, как Я хотел, чтобы использовать конкатенацию строк. Я собираюсь работать над использованием массива для решения моей проблемы, а затем выполнять пользовательские преобразования, когда я присоединяюсь к нему вместе. Кажется, что Javascript требует нечеткого подхода к концептуально простой проблеме.
Пример кода для командной строки:
function boolish(a){a=new Boolean(a);a.toString=function(){return this.valueOf()?"True":"False"};return a};
boolish(false) == false
boolish(true) == true
boolish(false) + " or " + boolish(true)
[boolish(false) , " or " , boolish(true)].join("~~~~~~~~")
Вы говорите, вы ожидаете 'обертка (истина)', чтобы оценить, булева истинно при использовании в вашей 'обертку (истина) == true' заявление, но' обертку (true) 'должен оцениваться строкой« True », если она используется в конкатенации строк? Это не сработает. – nnnnnn
@nnnnnn Да, это то, что я хочу. Wrapper может вернуть новый объект или что-то еще. Не имеет значения, как это происходит ... если это произойдет =). Я просто не могу понять, как это сделать. Обратите внимание, что это была оболочка (true) == true, а не wrapper (true) === true с 3 равными знаками. – user319862
@RobG, который не работает для конкатенации строк – user319862