Object.prototype.valueOf()方法

Mai*_*pal 0 javascript

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()记录时从方法返回 什么也不显示

Zir*_*rak 6

让我们看一下valueOf(这是一个链接)的作用:

设O是调用ToObject传递此值作为参数的结果.

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