Мне нужен способ оборачивать логическое значение таким образом, чтобы сравнение не прерывалось и строковый результат отличался от 'false' или 'true' без изменения глобальных логических значений
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) == 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("~~~~~~~~")