You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
23 lines
721 B
23 lines
721 B
"use strict"; |
|
|
|
var isValue = require("../value/is") |
|
, isObject = require("../object/is"); |
|
|
|
var objectToString = Object.prototype.toString; |
|
|
|
module.exports = function (value) { |
|
if (!isValue(value)) return null; |
|
if (isObject(value)) { |
|
// Reject Object.prototype.toString coercion |
|
var valueToString = value.toString; |
|
if (typeof valueToString !== "function") return null; |
|
if (valueToString === objectToString) return null; |
|
// Note: It can be object coming from other realm, still as there's no ES3 and CSP compliant |
|
// way to resolve its realm's Object.prototype.toString it's left as not addressed edge case |
|
} |
|
try { |
|
return "" + value; // Ensure implicit coercion |
|
} catch (error) { |
|
return null; |
|
} |
|
};
|
|
|