parse an array into a string code example

Example: array to string

/**
 * Array.prototype.toString() method
 *
 * Returns a string representing the elements of the array. Arguments are not
 * expected and silently ignored. Utilized under the hood when an array are
 * referred like a string should.
 */
var array = [1, 2, 3, 'I', 'II', 'III', 'ūnus', 'duo', 'trēs']

/**
 * Expected output:
 * '1,2,3,I,II,III,ūnus,duo,trēs'
 * '1,2,3,I,II,III,ūnus,duo,trēs'
 * '1,2,3,I,II,III,ūnus,duo,trēs'
 */
console.log(
	'%s\n%s\n%s',
    array.toString(),
    String(array),
    array + ''
)

/**
 * Under the hood Array.prototype.toString() utilizes Array.prototype.join()
 * method if available and falls back to Object.prototype.toString() method
 * otherwise
 * 
 * Expected output:
 * none if Array.prototype.toString() utilizes Array.prototype.join() method,
 * 'Assertion failed: [1,2,3,"I","II","III","ūnus","duo","trēs"].toString()
 * utilizes fallback method Object.prototype.toString() instead of the default
 * .join()' otherwise
 */
console.assert(
    typeof array.toString === typeof array.join &&
    array.toString() === array.join(),
    '%o.%O utilizes fallback method %s.%O instead of the default .%O',
    array,
    array.toString,
    'Object.prototype',
    Object.prototype.toString,
    array.join || Array.prototype.join
)

/**
 * Expected output:
 * '1,2,3,I,II,III,ūnus,duo,trēs'
 * '[object Array]'
 */
console.log(
    '%s\n%s',
    array.toString(),
    (array.join = null) || array.toString()
)

/**
 * Kinda polyfill with barbaric static fallback if Array.prototype.join()
 * and Object.prototype.toString() methods are both unavailable
 */
Array.prototype.toString || 
    Object.defineProperty(Array.prototype, 'toString', {
        value : function toString () {
            return typeof this.join === 'function'
            	? this.join()
                : typeof Object.prototype.toString === 'function'
                	? Object.prototype.toString.call(this)
                    : '[object Array]'
        },
        configurable: true,
        writable: true
   })