# toKey
# Description
将 value
转换成符合符合对象的属性( key )
和 js 的自动转换有一点不同,js 自动转换时,会将数字 -0 转换成字符串 "0",但是
toKey
会将数字-0
转换成字符串 "-0"。 (关于 js 转换 +0 和 -0 (opens new window) , 参考第二条 If m is +0 or −0, return the String "0".)
# Params
value
# Return
String | Symbol
Symbol
可以直接做对象的 key 值使用 (Symbol术语 MDN (opens new window))
# Depend
import isSymbol from '../isSymbol.js'
# Code
const INFINITY = 1 / 0
function toKey(value) {
if (typeof value === 'string' || isSymbol(value)) {
return value
}
const result = `${value}`
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result
}
# Analyze
- 判断传入的
value
如果为string
或者symbol
,则直接返回value
- 如果不为上述,则转换为字符串,判断如果 为
-0
, 则返回'-0'
, 否则返回 转换的结果
# Remark
- Number.prototype.toString() MDN (opens new window)
- Number.prototype.toString ECMAScript 2015 (opens new window)
- 其他类型的
toString MDN
参考 toString 源码分析 Remark - 模板字面量(模板字符串) MDN (opens new window)
- Number.NEGATIVE_INFINITY MDN (opens new window)
- Number.POSITIVE_INFINITY MDN (opens new window)
# Example
toKey(3) // '3'
toKey('a') // 'a'
toKey([1,2,3]) // '1,2,3'
toKey(-0) // '-0'