| 'use strict'; |
| |
| var toStr = Object.prototype.toString; |
| var hasSymbols = typeof Symbol === 'function' && typeof Symbol() === 'symbol'; |
| |
| if (hasSymbols) { |
| var symToStr = Symbol.prototype.toString; |
| var symStringRegex = /^Symbol\(.*\)$/; |
| var isSymbolObject = function isSymbolObject(value) { |
| if (typeof value.valueOf() !== 'symbol') { return false; } |
| return symStringRegex.test(symToStr.call(value)); |
| }; |
| module.exports = function isSymbol(value) { |
| if (typeof value === 'symbol') { return true; } |
| if (toStr.call(value) !== '[object Symbol]') { return false; } |
| try { |
| return isSymbolObject(value); |
| } catch (e) { |
| return false; |
| } |
| }; |
| } else { |
| module.exports = function isSymbol(value) { |
| // this environment does not support Symbols. |
| return false; |
| }; |
| } |