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; | ||
|  | 	}; | ||
|  | } |