accuracy of string type determination methods
by jdanyow
HTML
<pre id="result"></pre>
JavaScript
var s1 = 'hello',
s2 = new String('hello'),
concat1 = s1 === s1 + '',
concat2 = s2 === s2 + '',
toString1 = Object.prototype.toString.call(s1) === '[object String]',
toString2 = Object.prototype.toString.call(s2) === '[object String]',
typeOf1 = typeof s1 == 'string',
typeOf2 = typeof s2 == 'string',
instanceOf1 = s1 instanceof String,
instanceOf2 = s2 instanceof String,
typeOfInstanceOf1 = typeof s1 === 'string' || s1 instanceof String,
typeOfInstanceOf2 = typeof s2 === 'string' || s2 instanceof String;
document.getElementById('result').innerText =
'concat1 = ' + concat1.toString() + '\n' +
'concat2 = ' + concat2.toString() + '\n' +
'toString1 = ' + toString1.toString() + '\n' +
'toString2 = ' + toString2.toString() + '\n' +
'typeOf1 = ' + typeOf1.toString() + '\n' +
'typeOf2 = ' + typeOf2.toString() + '\n' +
'instanceOf1 = ' + instanceOf1.toString() + '\n' +
'instanceOf2 = ' + instanceOf2.toString() + '\n' +
'typeOfInstanceOf1 = ' + typeOfInstanceOf1.toString() + '\n' +
'typeOfInstanceOf2 = ' + typeOfInstanceOf2.toString() + '\n';