JSFiddle - React, Tailwind, and code Playground
by Alexander
JavaScript
console.clear();
/**
* Примерный алгоритм приведения к примитивам
*/
function typeCast2primitive(arg){
//Если аргумент уже примитив, возвращаем как есть
if (typeOfArg(arg) === Primitive)
return arg;
// Если результат выполнения его метода valueOf() - примитив, то возвращаем результат выполнения valueOf()
if (arg.valueOf() === Primitive)
return arg.valueOf();
// Если результат выполнения его метода toString() - примитив, возвращаем результат toString()
if (arg.toString() === Primitive)
return arg.toString();
//Иначе, выбрасываем исключение TypeError
throw TypeError();
}
/**
* Примерный алгоритм сложения
*/
function sumOperands(a, b){
// Если хотя бы один из результатов приведения аргументов к примитивам - строка, сконвертировать оба аргумента в строки и сконкатенировать их
if (typeof a == "string" || typeof b == "string")
return String(a) + String(b);
// Иначе привести оба аргумента к числу и сложить
return Number(a) + Number(b);
}
//*/
var o = {
valueOf: function() { return 1 },
//toString: function() { return "a" }
}
console.log( o + 1 );