36 lines
		
	
	
		
			767 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			767 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var toStr = Object.prototype.toString;
 | |
| var hasSymbols = require('has-symbols')();
 | |
| 
 | |
| if (hasSymbols) {
 | |
| 	var symToStr = Symbol.prototype.toString;
 | |
| 	var symStringRegex = /^Symbol\(.*\)$/;
 | |
| 	var isSymbolObject = function isRealSymbolObject(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 && value;
 | |
| 	};
 | |
| }
 |