Edit in JSFiddle

function hex(s) {
    return s && s.toLowerCase() !== 'nan' && parseInt(s, 16).toString(16) === s.toLowerCase() && (parseInt(s, 10) + '') !== s;
}

function okhex(s) {
    ok(hex(s), s);
}

function failhex(s) {
    ok(!hex(s), s);
}
test('典型的16进制数字', function() {
    okhex('1a23');
    okhex('123b');
    okhex('c123');
    okhex('a');
});

test('数字,以及包含特殊字符的数字', function() {
    failhex('123');
    failhex('1z23');
    failhex('123z');
    failhex('z123');
});

test('特殊字符', function() {
    failhex('z');
    failhex('NaN');
    failhex('nan');
    failhex('');
});

External resources loaded into this fiddle:

<div id="qunit-header"><h1>不使用正则检测指定字符串是否一定是16进制数字</h1></div>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<div id="qunit-fixture">test markup, will be hidden</div>