Skip to content

Instantly share code, notes, and snippets.

@cowboy
Created September 18, 2012 12:23
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cowboy/3742823 to your computer and use it in GitHub Desktop.
Save cowboy/3742823 to your computer and use it in GitHub Desktop.
JavaScript: isPrimitive
var isPrimitive = function(val) {
return val !== function() { return this; }.call(val);
};
'use strict';
var isPrimitive = function(val) {
return val == null || /^[sbn]/.test(typeof val);
};
var assert = require('assert');
assert.ok(isPrimitive(null));
assert.ok(isPrimitive(undefined));
assert.ok(isPrimitive(1));
assert.ok(isPrimitive('foo'));
assert.ok(isPrimitive(true));
assert.ok(isPrimitive(false));
assert.ok(isPrimitive(NaN));
assert.ok(isPrimitive(Infinity));
assert.equal(isPrimitive({}), false);
assert.equal(isPrimitive([]), false);
assert.equal(isPrimitive(/./), false);
assert.equal(isPrimitive(global), false);
assert.equal(isPrimitive(function() {}), false);
assert.equal(isPrimitive(new function() {}), false);
assert.equal(isPrimitive(new Number), false);
assert.equal(isPrimitive(new String), false);
assert.equal(isPrimitive(new Boolean), false);
assert.equal(isPrimitive(new Date), false);
assert.equal(isPrimitive(new Error), false);
assert.equal(isPrimitive(Object.create(null)), false);
3
@patik
Copy link

patik commented Sep 18, 2012

Regexp?

@cowboy
Copy link
Author

cowboy commented Sep 18, 2012

RegExp is represented via /./

@AutoSponge
Copy link

function isPrimitive(val) {
return val !== Object(val);
}

function isPrimitive(val) {
return !Object.prototype.isPrototypeOf(val);
}

@bobmyers
Copy link

@AutoSponge, your second version of isPrimitive fails on objects created via Object.create(null, ....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment