util: simplify `isPrimitive`
authorVladimir Kurchatkin <vladimir.kurchatkin@gmail.com>
Fri, 6 Feb 2015 13:06:07 +0000 (16:06 +0300)
committerVladimir Kurchatkin <vladimir.kurchatkin@gmail.com>
Sat, 7 Feb 2015 14:41:44 +0000 (17:41 +0300)
Everything that is not an object should be a primitive.

PR-URL: https://github.com/iojs/io.js/pull/739

Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
lib/util.js
test/parallel/test-util.js

index f84f528..86f585f 100644 (file)
@@ -566,11 +566,7 @@ exports.isFunction = isFunction;
 
 function isPrimitive(arg) {
   return arg === null ||
-         typeof arg === 'boolean' ||
-         typeof arg === 'number' ||
-         typeof arg === 'string' ||
-         typeof arg === 'symbol' ||  // ES6 symbol
-         typeof arg === 'undefined';
+         typeof arg !== 'object' && typeof arg !== 'function';
 }
 exports.isPrimitive = isPrimitive;
 
index d8966ce..2fb4bc5 100644 (file)
@@ -51,6 +51,25 @@ assert.equal(true, util.isError(Object.create(Error.prototype)));
 // isObject
 assert.ok(util.isObject({}) === true);
 
+// isPrimitive
+assert.equal(false, util.isPrimitive({}));
+assert.equal(false, util.isPrimitive(new Error));
+assert.equal(false, util.isPrimitive(new Date()));
+assert.equal(false, util.isPrimitive([]));
+assert.equal(false, util.isPrimitive(/regexp/));
+assert.equal(false, util.isPrimitive(function(){}));
+assert.equal(false, util.isPrimitive(new Number(1)));
+assert.equal(false, util.isPrimitive(new String('bla')));
+assert.equal(false, util.isPrimitive(new Boolean(true)));
+assert.equal(true, util.isPrimitive(1));
+assert.equal(true, util.isPrimitive('bla'));
+assert.equal(true, util.isPrimitive(true));
+assert.equal(true, util.isPrimitive(undefined));
+assert.equal(true, util.isPrimitive(null));
+assert.equal(true, util.isPrimitive(Infinity));
+assert.equal(true, util.isPrimitive(NaN));
+assert.equal(true, util.isPrimitive(Symbol('symbol')));
+
 // _extend
 assert.deepEqual(util._extend({a:1}),             {a:1});
 assert.deepEqual(util._extend({a:1}, []),         {a:1});