Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么;“福”;。toString()与toString.call(“foo”)不同?_Javascript - Fatal编程技术网

Javascript 为什么;“福”;。toString()与toString.call(“foo”)不同?

Javascript 为什么;“福”;。toString()与toString.call(“foo”)不同?,javascript,Javascript,下面是JavaScript中的一个问题: // Tested via Google Chrome console. var toString = Object.prototype.toString; "foo".toString(); // "foo" toString.call("foo"); // [object String] [].toString(); // "" toString.call([]);

下面是JavaScript中的一个问题:

// Tested via Google Chrome console.
var toString = Object.prototype.toString;

"foo".toString(); // "foo"
toString.call("foo"); // [object String]

[].toString(); // ""
toString.call([]); // [object Array]

{}.toString(); // syntax error
toString.call({}); // [object Object]
为什么toString的结果与toString.call()不同

已更新

String.prototype.toString.call("foo"); // "foo"
Object.prototype.toString.call("foo"); // [object String]
String.prototype.toString不是来自下面的原型链吗

toString in String[未找到]-->toString in String.prototype[未找到]

                           --> toString in Object.prototype[found]

对象与字符串不同。

全局
toString
函数与
Object.toString()
函数不同。
根据,global
toString
函数的定义不是很好,因此在不同的浏览器中实现得很差。本质上,它提供了类似于
类型的
操作符的功能。

String.prototype.toString
覆盖
对象.prototype.toString
。它们不是相同的函数

从:

返回此字符串值。(注意,对于字符串对象,toString方法恰好返回与valueOf方法相同的内容。)

以及:

调用toString方法时,将执行以下步骤:

  • 让O作为调用ToObject的结果,将值作为参数传递
  • 设class为O的[[class]]内部属性的值
  • 返回串接三个字符串“[object”、类和“]”的结果字符串值
  • 数组的行为类似,它们也重写
    toString()


    不是javascript专家,但我怀疑这与调用预定义函数并向其传递null参数有关,而不是对不存在的对象调用函数。如何检查这些结果?浏览器控制台,还是别的?@ShadowWizard Chrome浏览器控制台。我以为浏览器的显示不好,但看起来我错了,对不起。字符串的toString方法来自
    字符串,对吗?和
    String.\uuuu proto\uuuu
    应该是
    Object
    ,那么为什么字符串中的toString不等于对象中的toString?是的,但是字符串会覆盖对象toString,以显示比[Object X]更友好的打印输出。如果它没有覆盖默认的toString,那么您的想法是正确的。toString OP所指的不是定义不好的“全局toString”,而是OPMy眼中定义非常好的“var-toString=Object.prototype.toString”,它一定已经越过了第一行代码。道歉。
    >>> String.prototype.toString.call("foo")
    "foo"
    
    > [1,2].toString()
      "1,2"