Object.prototype.valueOf.call("abc")
{ '0': 'a'
, '1': 'b'
, '2': 'c'
}
Object.prototype.valueOf.call(new String("abc"))
{ '0': 'a'
, '1': 'b'
, '2': 'c'
}
Run Code Online (Sandbox Code Playgroud)
根据MDN,JavaScript调用valueOf方法将对象转换为原始值.如果对象没有原始值,则valueOf返回对象本身,显示为:
[object Object]
但是valueOf以不同的格式返回而不是返回原语.是
{ '0': 'a'
, '1': 'b'
, '2': 'c'
}不是它违反了定义?为什么它以那种格式返回.现在,这造成了混乱.如何知道如果为数组和其他调用Object.prototype.valueOf.call(array)将返回什么对象.
此外,为什么返回对象表单{}.valueOf()会显示,因为[].valueOf()记录时从方法返回 什么也不显示
让我们看一下valueOf(这是一个链接)的作用:
设O是调用ToObject传递此值作为参数的结果.
串
创建一个新的String对象,其[[PrimitiveValue]]内部属性设置为参数的值.有关String对象的说明,请参见15.5.
换句话说,它只是创建一个具有原始值的新字符串对象,即new String('abc').现在看看它在控制台中的显示方式,您会发现它与.valueOf.call结果相同.
编辑:这实际上更多地与您用于查看答案的媒介有关.Chrome和Firefox的开发工具将字符串显示为其文字值(字符串本身),但将字符串对象显示为常规对象(通过显示其属性).
字符串只是字符的"数组",上面有一些方法.因此,表示{'0' : 'a', '1' : 'b', '2' : 'c'}意味着" a在第一个位置,b在第二个位置,在c第三个位置",这是您要求的字符串.
最后一点,valueOf不给[object ObjectName].你可能指的是Object.prototype.toString
| 归档时间: |
|
| 查看次数: |
1322 次 |
| 最近记录: |