fei.wang
8 天以前 ae7b22322555448d95fd56f505bafa325c167a26
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
'use strict';
 
var callBound = require('call-bound');
var $toString = callBound('Object.prototype.toString');
var hasSymbols = require('has-symbols')();
var safeRegexTest = require('safe-regex-test');
 
if (hasSymbols) {
    var $symToStr = callBound('Symbol.prototype.toString');
    var isSymString = safeRegexTest(/^Symbol\(.*\)$/);
 
    /** @type {(value: object) => value is Symbol} */
    var isSymbolObject = function isRealSymbolObject(value) {
        if (typeof value.valueOf() !== 'symbol') {
            return false;
        }
        return isSymString($symToStr(value));
    };
 
    /** @type {import('.')} */
    module.exports = function isSymbol(value) {
        if (typeof value === 'symbol') {
            return true;
        }
        if (!value || typeof value !== 'object' || $toString(value) !== '[object Symbol]') {
            return false;
        }
        try {
            return isSymbolObject(value);
        } catch (e) {
            return false;
        }
    };
} else {
    /** @type {import('.')} */
    module.exports = function isSymbol(value) {
        // this environment does not support Symbols.
        return false && value;
    };
}