/**
* 检查`value`是否大于`other`
* Checks if `value` is greater than `other`
* @param {*} value The value to compare.
* @param {*} other The other value to compare
* @returns {boolean} Returns `true` if `value` is greater than `other`, else `false`
* @example
*
* gt(3, 1)
* // => true
*
* gt(3, 3)
* // => false
*
* gt(1, 3)
* // => false
*
* gt('1', '3')
* // => false
*
* gt(new Date('2019-05-05'), new Date('2019-03-03'))
* // => true
*/
const symbolTag = "[object Symbol]"
const NAN = 0 / 0
function isObjectLike(value) {
return typeof value == "object" && value !== null
}
function isSymbol(value) {
return (
typeof value === "symbol" ||
(isObjectLike(value) && Object.prototype.toString.call(value) === symbolTag)
)
}
function toNumber(value) {
if (typeof value === "number") {
return value
}
if (isSymbol(value)) {
return NAN
}
return Number(value)
}
function createRelationalOperation(operator) {
return function(value, other) {
if (typeof value !== "number") {
value = toNumber(value)
}
if (typeof other !== "number") {
other = toNumber(other)
}
return operator(value, other)
}
}
const gt = createRelationalOperation(function(value, other) {
return value > other
})
export default gt